右括号缺失ora-00907

时间:2012-06-09 04:56:35

标签: sql oracle ora-00907

SELECT * FROM (
    SELECT
    ORG_ROADMARK,
    COUNT(DISTINCT EQUIP_INITIAL||EQUIP_NUM||move_dtm) AS Billing_Count
    FROM CMD_BILLING_INFO
    WHERE move_dtm BETWEEN' 01-FEB-12' AND '29-FEB-12'
    AND (
        (MOVE_TYPE_CD ='ICR' AND EQUIP_STATUS_CD IN ('L','W'))
        OR
        ( MOVE_TYPE_CD ='RLO' AND EQUIP_STATUS_CD ='L' )
        OR
        ( MOVE_TYPE_CD ='RMT' AND EQUIP_STATUS_CD ='W' )
    ) GROUPBY ORG_ROADMARK
) ORDERBY ORG_ROADMARK

我错过了上面的sql的右括号错误。使用这个sql我能够得到月份期间的结果,并试图修改这个以获得过去24个月的结果,每月都有任何建议。

3 个答案:

答案 0 :(得分:4)

  1. GROUP子句中的BYGROUP BY字以及{ORDERBY中的字词之间需要一个空格1}}子句。

  2. 虽然它不会导致语法错误,但您几乎肯定不希望ORDER BY旁边没有单引号。我强烈建议你也不要依赖隐式转换,因为有不同NLS设置的人可能想要运行此代码。

    BETWEEN

    WHERE move_dtm BETWEEN to_date( '01-FEB-2012', 'DD-MON-YYYY' ) 
                   AND to_date( '29-FEB-2012', 'DD-MON-YYYY' )
    

答案 1 :(得分:2)

ORA-00907例外有两个原因。

第一个是,平庸地,有一个左副词 - ( - 没有合作的右括号 - )。这些可能很难手动诊断,特别是在大型SQL语句中,但如果你有一个具有括号匹配功能的体面IDE,则很容易诊断。

第二个原因是包含括号的SQL语句中的语法错误。如果我们错误地键入关键字Oracle将其视为对象名称。这可能会导致它抛出许多错误,例如ORA-00905,ORA-00936以及the 00900 to 01499 range中的许多其他错误。 ORA-00907就是其中之一。同样,一个体面的IDE将在这里提供帮助:语法突出显示可以帮助我们识别拼写错误,因为我们没有突出显示拼写错误的关键字。

在您的特定情况下,将GROUP BY压缩成一个单词似乎可能是罪魁祸首。您还需要修复ORDER BY

答案 2 :(得分:1)

问题似乎是错误的引用BETWEEN'

BETWEEN' 01-FEB-12' AND '29-FEB-12'