2015-03-19 3 views
2

Я пишу код, который генерирует SQL-запросы на основе строковых параметров. При построении запроса я проверяю, является ли сравниваемое значение в WHERE-части инструкции словом или числом, и на основе этого я добавляю апострофы.В Oracle SQL, каковы ключевые слова, которые представляют числовое значение?

Проблема в том, что есть несколько ключевых слов, которые представляют числовое значение, например sysdate, поэтому я хотел бы сравнить входное слово со списком ключевых слов, которые представляют числовое значение.

Я выполнил команду:

select * from V$RESERVED_WORDS 

, но было дано более 1000 ключевых слов, и многие из них не имеют значения (например, SELECT). Есть ли способ получить список только ключевых слов с числовым значением?

+4

'sysdate' не представляет собой« числовое »значение, оно представляет собой« DATE » –

+2

. Я бы настоятельно советовал против такого подхода. Это вызовет проблемы без конца в будущем - например, есть «5» числовое значение? Что касается «5.4», «.4» (американский стиль без ведущего 0), «4,3» (немецкий десятичный разделитель), «0.7E-17» (научная нотация), «20150319» (либо число, либо сегодняшняя дата), ...? –

+2

Вместо того, чтобы смотреть на тип данных, переданных в значение для WHERE, посмотрите на тип данных используемого столбца (вы можете запросить его из 'user_tab_columns') ...' DATE' и 'TIMESTAMP' будут всегда нужно относиться по-разному, конечно, а не просто котировать или нет. – Captain

ответ

1

При построении запроса я проверяю, является ли сравниваемое значение в выражении WHERE слова или числа, и на основе этого я добавляю апострофы.

Возможно, вы жертвуете плохим дизайном. Вы должны знать свой дизайн базы данных достаточно хорошо, прежде чем разрабатывать код. Независимо от того, просто ли это SQL или PL/SQL. Особенно, когда речь идет о типах данных, вы должны быть максимально точными, чтобы использовать соответствующий тип данных, чтобы убедиться, что Oracle оптимизатор действует так, как он разработан. Иначе вы в конечном итоге устраните узкие места производительности.

некоторые ключевые слова, которые представляют собой числовое значение, например, SYSDATE,

SYSDATE представляет собой тип DATE данных, а не тип NUMBER данных в Oracle.

Вместо того, чтобы перечислить все зарезервированные ключевые слова, я хотел бы попытаться перечислить вниз типы данных, которые вы ищете:

ПРИМЕЧАНИЕ Я не упоминается PL/SQL данные о такие как PLS_INTEGER и т. д., так как ваш вопрос явно говорит В Oracle SQL.

number_datatypes :: =

  • NUMBER

  • BINARY_FLOAT

  • BINARY_DOUBLE

ANSI_supported_datatypes :: =

  • NUMERIC

  • DECIMAL

  • декабря

  • INTEGER

  • INT

  • SMALLINT

  • FLOAT

  • DOUBLE

  • РЕАЛ

Я попытался резюмировать от documentation.

EDIT

Возможно, это может быть полезно, так что добавление ссылки на PL/SQL типы данных документации. Здесь http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/datatypes.htm#i46029

+0

Я думаю, что OP ищет значения, которые представляют числа, такие как 'NaN', а не типы данных. Вне 'CAST', вы редко видите типы данных в DML. – Allan

+0

Ну, вопрос OP - это ** какие ключевые слова представляют числовое значение? ** Также его попытка запросить зарезервированные ключевые слова приведет меня к ответу соответственно. Я жду ответа OP. –

Смежные вопросы