0
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か月の結果を月ごとに取得しようとしました。

4

3 に答える 3

4
  1. 節内の単語と節内の単語と節GROUP内のBY単語の間にはスペースが必要です。GROUP BYORDERBYORDER BY

  2. 構文エラーにはなりませんが、BETWEEN. NLS 設定が異なる誰かがこのコードを実行する可能性があるため、暗黙的な変換にも依存しないことを強くお勧めします。

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

    また

    WHERE move_dtm BETWEEN date '2012-02-01' AND date '2012-02-29'
    
于 2012-06-09T05:13:46.097 に答える
2

ORA-00907 例外には 2 つの原因があります。

1つ目は、平凡に、左括弧があり(ます--パートナーの右括弧なし- ). これらは、特に大規模な SQL ステートメントでは手動で診断するのが難しい場合がありますが、ブラケット マッチング機能を備えたまともな IDE があれば十分に簡単です。

2 番目の原因は、括弧を含む SQL ステートメントの構文エラーです。キーワードを間違って入力すると、Oracle はそれをオブジェクト名として扱います。これにより、ORA-00905、ORA-00936 など、00900 から 01499 の範囲の多くのエラーがスローされる可能性があります。ORA-00907 はその 1 つです。ここでも、適切な IDE が役立ちます。構文の強調表示は、スペルミスのあるキーワードを強調表示しないことで、タイプミスを識別するのに役立ちます。

あなたの特定のケースではGROUP BY、単一の単語への圧縮が原因である可能性が高いようです。また、修正する必要がありますORDER BY

于 2012-06-09T15:52:29.827 に答える
1

問題は見当違いの引用のようですBETWEEN'

BETWEEN' 01-FEB-12' AND '29-FEB-12'
于 2012-06-09T05:09:16.270 に答える