Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL开发人员-错误:“未在预期位置找到FROM关键字”_Sql_Oracle - Fatal编程技术网

Oracle SQL开发人员-错误:“未在预期位置找到FROM关键字”

Oracle SQL开发人员-错误:“未在预期位置找到FROM关键字”,sql,oracle,Sql,Oracle,很抱歉我的noob问题,但我正在试图找出为什么我的oraclesql会显示错误 未找到FROM关键字,如下图所示: 我尝试运行的代码如下所示: 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

很抱歉我的noob问题,但我正在试图找出为什么我的oraclesql会显示错误 未找到FROM关键字,如下图所示:

我尝试运行的代码如下所示:

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 正如错误消息所指出的,这对我来说毫无意义

此外,当我删除一些行以接近错误时,图中所示的红线保留在第一行


你能猜出为什么会这样吗?很抱歉再次提出这个基本问题。

FROM子句的最后一个表proddta.f4301 c中有一个尾随逗号,应该变成

... 
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",
...

在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语法。

您的最后一个select列rankYou后面有一个逗号,您的最后一个表proddta后面也有一个逗号。f4301 c,您似乎还混合了别名的单引号和双引号,这可能是错的,也可能不是错的我对Oracle不够熟悉,无法判断,这至少是不一致的。还建议使用“现代”联接语法,而不是逗号分隔的表列表。使用每个属性的表别名来限定每个属性也是一种很好的做法,因此更明显的是,例如PCKCOO来自何处。提醒以后:此错误通常是由于SELECT子句“SUFIXO_DO_PEDIDO”中的逗号问题导致的,因为“SUFIXO_DO_PEDIDO”是无效的SQL。单引号用于字符串值,而不是标识符