Oracle SQL Developer - ошибка: «ключевое слово FROM не найдено там, где ожидается» - PullRequest
0 голосов
/ 11 сентября 2018

Извините за вопрос noob, но я пытаюсь выяснить, почему мой Oracle-SQL показывает ошибку
"Ключевое слово FROM не найдено там, где ожидается" , как показано на рисунке ниже:

enter image description here

Код, который я пытаюсь запустить, следующий:

select  
   PCKCOO AS 'COMPANHIA_DO_PEDIDO_NUMERO_DO_PEDIDO',
   PCDOCO AS 'DOCUMENTO_NUMERO_DA_OS_FATURA',
   PCDCTO AS 'TIPO_DE_ORDEM',
   PCSFXO AS 'SUFIXO_DO_PEDIDO',
   rpad(HORDT,'0',6) AS 'HORARIO_DE_LIBERACAO',
   FX_PARA_GREGORIANA(HORDJ, 'DD/MM/YYYY')||' '||rpad(HORDT,6,'0') "APROVACAO",
   rank() over (partition by pckcoo, pcdoco, pcdcto, pclnid order by FX_PARA_GREGORIANA(HORDJ, 'DD/MM/YYYY')||' '||rpad(HORDT,6,'0') desc) as rank,
   FROM PRODDTA.F5543170 a,
        proddta.f4209 b,
        proddta.f4301 c,  
   WHERE 
   PCKCOO = '52171' AND
   PCDCTO In ('OP','C1','C2','FZ','OF') AND
                   ((PCTRDJ >= '117060' AND PCTRDJ <= '117090') 
                   or (PCTRDJ >= '116061' AND PCTRDJ <= '116091')
                    ) and
                    ( b.hokcoo = a.pckcoo  and
                      b.hodoco = a.pcdoco and
                      b.hodcto = a.pcdcto and
                      B.HOASTS = '2A') and
                      (c.phkcoo (+)= a.pckcoo and
                       c.phdoco (+)= COALESCE(TO_NUMBER(REGEXP_SUBSTR(PCOORN, '^(-|+)?d+(.|,)?(d+)?$')), 0)  AND
                       c.phdcto (+)= 'OR') 

Код был намного больше, но я разрезал его на частичтобы выяснить, почему это происходит (особенно в отношении строки : 3 и столбец: 25 , как указано в сообщении об ошибке, что для меня не имеет смысла).

Кроме того, когда я стираю несколько строк, чтобы приблизиться к ошибке, красная линия (как показано на рисунке) остается в первой строке.

enter image description here

У вас есть предположение, почему это происходит?(еще раз извините за основной вопрос).

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

У вас есть запятые после AS RANK и после proddta.f4301 c.

Кроме того, вы не можете использовать одинарные кавычки для псевдонимов столбцов, но вам нужны двойные кавычки; это должно работать:

SELECT PCKCOO AS "COMPANHIA_DO_PEDIDO_NUMERO_DO_PEDIDO",
       PCDOCO AS "DOCUMENTO_NUMERO_DA_OS_FATURA",
       PCDCTO AS "TIPO_DE_ORDEM",
       PCSFXO AS "SUFIXO_DO_PEDIDO",
       RPAD(
            HORDT,
            '0',
            6
           )
           AS "HORARIO_DE_LIBERACAO",
          FX_PARA_GREGORIANA(HORDJ, 'DD/MM/YYYY')
       || ' '
       || RPAD(
               HORDT,
               6,
               '0'
              )
           "APROVACAO",
       RANK()
           OVER(
                PARTITION BY pckcoo,
                             pcdoco,
                             pcdcto,
                             pclnid
                ORDER BY
                       FX_PARA_GREGORIANA(HORDJ, 'DD/MM/YYYY')
                    || ' '
                    || RPAD(
                            HORDT,
                            6,
                            '0'
                           ) DESC
               )
           AS RANK
  FROM PRODDTA.F5543170 a,
       proddta.f4209 b,
       proddta.f4301 c
 WHERE     PCKCOO = '52171'
       AND PCDCTO IN ('OP',
                      'C1',
                      'C2',
                      'FZ',
                      'OF')
       AND (   (    PCTRDJ >= '117060'
                AND PCTRDJ <= '117090')
            OR (    PCTRDJ >= '116061'
                AND PCTRDJ <= '116091'))
       AND (    b.hokcoo = a.pckcoo
            AND b.hodoco = a.pcdoco
            AND b.hodcto = a.pcdcto
            AND B.HOASTS = '2A')
       AND (    c.phkcoo(+) = a.pckcoo
            AND c.phdoco(+) = COALESCE(TO_NUMBER(REGEXP_SUBSTR(PCOORN, '^(-|+)?d+(.|,)?(d+)?$')), 0)
            AND c.phdcto(+) = 'OR')

Кроме того, вам лучше переключиться на синтаксис ANSI JOIN.

0 голосов
/ 11 сентября 2018

В последней таблице (proddta.f4301 c) у вас есть конечная запятая из условия FROM, и она должна стать

... 
FROM PRODDTA.F5543170 a,
     proddta.f4209 b,
     proddta.f4301 c  
...

, которую следует удалить.

В вашем операторе select также есть конечная запятая, которую также следует удалить.

...
rank() over (partition by pckcoo, pcdoco, pcdcto, pclnid order by FX_PARA_GREGORIANA(HORDJ, 'DD/MM/YYYY')||' '||rpad(HORDT,6,'0') desc) as rank
...

Наконец, для псевдонима таблицы необходимо использовать двойные вместо одинарных кавычек:

select  
   PCKCOO AS "COMPANHIA_DO_PEDIDO_NUMERO_DO_PEDIDO",
   PCDOCO AS "DOCUMENTO_NUMERO_DA_OS_FATURA",
   PCDCTO AS "TIPO_DE_ORDEM",
   PCSFXO AS "SUFIXO_DO_PEDIDO",
   rpad(HORDT,'0',6) AS "HORARIO_DE_LIBERACAO",
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...