Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.239.150.167] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Добрый день, форумчане,
Помогите, пожалуйста, исправить ошибку в запросе SQL к базе Oracle. В запросе использована переменная типа даты - NewDate. DECLARE NewDate DATE; BEGIN NewDate:= TO_DATE ('01/11/2022', 'DD/MM/YYYY'); END; SELECT a.* FROM vw_st_imd_orders a WHERE entry_date>= NewDate AND prct_cod IN (476) AND order_state = 0 AND refuse_reason NOT IN (140,122,133) AND recl_uncod = 12657303 Без переменной запрос работает нормально, но после того, как добавил переменную, запрос стал выдавать ошибку: Error report - ORA-06550: Строка 8, столбец 1: PLS-00103: Встретился символ "SELECT" 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action: |
Сообщ.
#2
,
|
|
|
Ну вообще-то запрос SELECT должен быть внутри блока BEGIN-END, вроде как...
|
Сообщ.
#3
,
|
|
|
Включил begin-end в select, но все равно появляется новая ошибка с INTO:
DECLARE NewDate DATE; BEGIN NewDate:= TO_DATE ('01/01/2022', 'DD/MM/YYYY'); SELECT a.* FROM vw_st_imd_orders a WHERE entry_date>= NewDate --'01/01/2022' AND prct_cod IN (476) AND order_state = 0 AND refuse_reason NOT IN (140,122,133) AND recl_uncod = 12657303; END; Error report - ORA-06550: Строка 7, столбец 3: PLS-00428: в этом предложении SELECT ожидается фраза INTO 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. Не смог найти место для INTO. |
Сообщ.
#4
,
|
|
|
А если вынести NewDate:= TO_DATE ('01/01/2022', 'DD/MM/YYYY'); в блок DECLARE ?
|
Сообщ.
#5
,
|
|
|
И еще, может я ошибаюсь, но FROM vw_st_imd_orders a нужно писать как FROM vw_st_imd_orders AS a
|
Сообщ.
#6
,
|
|
|
В таблице есть поле NewDate?
|
Сообщ.
#7
,
|
|
|
Цитата MIF @ В таблице есть поле NewDate? Это же переменная запроса на PL/SQL |
Сообщ.
#8
,
|
|
|
Одно другого не исключает.
|
Сообщ.
#9
,
|
|
|
Автор пока молчит
|
Сообщ.
#10
,
|
|
|
Цитата Red Fox @ в этом предложении SELECT ожидается фраза INTO Данное сообщение говорит о том, что показанный код используется в объекте, не допускающем вывода (из которого не разрешён возврат набора записей). Например, в триггере... |
Сообщ.
#11
,
|
|
|
Цитата MIF @ Такого поля нет, это только переменная типа дата. А поле называется entry_date. |
Сообщ.
#12
,
|
|
|
Red Fox, смотри - похоже твой вопрос.
|
Сообщ.
#13
,
|
|
|
Похоже, что нашел решение. Вот скрипт:
DEFINE NewDate= TO_DATE ('01.06.2023', 'DD.MM.YYYY') SELECT a.* FROM vw_st_imd_orders a WHERE ENTRY_DATE>= &&NewDate AND prct_cod IN (476) --AND order_state = 0 AND refuse_reason NOT IN (140,122,133) AND recl_uncod = 12657303 |