选择语句时ORA-00936

时间:2017-11-15 06:50:30

标签: sql oracle join oracle11g outer-join

SELECT * FROM A,B
WHERE 
A.COMP_CODE = B.COMP_CODE (+)
AND 
A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE,'yyyymm'),-1),'YYYYMM') (+)

当我执行此语句时,我收到错误:ORA-00936。 当我在结尾处删除(+)时此语句可以正常工作,但我希望在此语句中保留(+)。

1 个答案:

答案 0 :(得分:2)

对外部联接使用旧的(+)语法时,(+)应该直接跟随您的外部联接的列,而不是整个表达式:

SELECT *
FROM   A, B
WHERE  A.COMP_CODE = B.COMP_CODE (+)
       AND 
       A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE (+), 'yyyymm'), 'YYYYMM')
       -- Here -----------------------------------^

但老实说,这种语法已被认为已被弃用多年没有。使用现代显式outer join语法可能会更好:

SELECT *
FROM   A
LEFT OUTER JOIN B ON -- Here!
    A.COMP_CODE = B.COMP_CODE
    AND 
    A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE, 'yyyymm'), 'YYYYMM')