Oracle SQL: использование переменной связывания для дат - PullRequest
2 голосов
/ 13 мая 2010

Вот простой рабочий запрос без переменных связывания:

select * from table1 where time_stamp > sysdate - INTERVAL '1' day;

, где time_stamp имеет тип DATE.

Я должен иметь возможность вводить любое количество дней в вышеупомянутом запросе, используя переменную bind.

Итак, я попробовал следующее и, похоже, не работает:

select * from table1 where time_stamp > sysdate - INTERVAL :days day;

Я попытался ввести числовой ввод как 10, так и 10, например. Вы получаете ORA-00933 ошибка на 10g.

1 Ответ

10 голосов
/ 13 мая 2010

Строка INTERVAL '1' day в вашем исходном запросе является литералом интервала, т. Е. Она анализируется синтаксическим анализатором до одного значения. Вы не можете заменить его частью переменной связывания.

Если вместо этого вы используете NUMTODSINTERVAL( 1, 'DAY' ), то 1 - это целочисленный литерал, который вы можете заменить переменной связывания.

...