На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Ошибка в запросе SQL с переменной в базе Oracle , Появляется ошибка в запросе SQL с переменной типа Дата в базе Oracle, ошибка в скрипте запроса.
    Добрый день, форумчане,

    Помогите, пожалуйста, исправить ошибку в запросе SQL к базе Oracle. В запросе использована переменная типа даты - NewDate.

    ExpandedWrap disabled
      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:
      Ну вообще-то запрос SELECT должен быть внутри блока BEGIN-END, вроде как...
        Включил begin-end в select, но все равно появляется новая ошибка с INTO:

        ExpandedWrap disabled
          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.
          А если вынести NewDate:= TO_DATE ('01/01/2022', 'DD/MM/YYYY'); в блок DECLARE ?
            И еще, может я ошибаюсь, но FROM vw_st_imd_orders a нужно писать как FROM vw_st_imd_orders AS a :-?
              В таблице есть поле NewDate?
                Цитата MIF @
                В таблице есть поле NewDate?

                Это же переменная запроса на PL/SQL
                  Одно другого не исключает.
                    Автор пока молчит :-?
                      Цитата Red Fox @
                      в этом предложении SELECT ожидается фраза INTO

                      Данное сообщение говорит о том, что показанный код используется в объекте, не допускающем вывода (из которого не разрешён возврат набора записей). Например, в триггере...
                        Цитата MIF @

                        Такого поля нет, это только переменная типа дата. А поле называется entry_date.
                          Red Fox, смотри - похоже твой вопрос.
                            Похоже, что нашел решение. Вот скрипт:

                            ExpandedWrap disabled
                              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
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0334 ]   [ 15 queries used ]   [ Generated: 27.04.24, 09:56 GMT ]