sql >> データベース >  >> RDS >> Oracle

内部クエリを使用したORDERBY、ORA-00907に右括弧がありません

    コーディングスタイルと不要なネストされた角かっこは、これを読み、解釈するのを非常に難しくします。ただし、一部のコメントとは異なり、ORA-00907は必ずしも括弧の数が不均一であることを意味するわけではなく、パーサーがベイルアウトする原因となったより一般的な構文エラーを示している可能性もあります。この場合、あまり役に立ちません。

    問題はorder by inと比較しているサブクエリ内の最後から2番目の行の句 :

    ...
    AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
    ...
    TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
    ORDER BY TESTCYCL.TC_TESTCYCL_ID)
    ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
    

    最終的な順序付けは明らかに許可されていますが、そのサブクエリでは許可されていません。したがって、終了する必要があります:

    ...
    TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
    ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
    

    私はあなたのスキーマを持っていないのでそれをテストすることはできませんが、より簡単なデモがデモンストレーションに役立つかもしれません:

    select d1.dummy
    from dual d1
    where d1.dummy in (
      select dummy
      from dual d2
      order by d2.dummy
    )
    order by d1.dummy;
    
    Error at Command Line : 6 Column : 3
    Error report -
    SQL Error: ORA-00907: missing right parenthesis
    00907. 00000 -  "missing right parenthesis"
    

    内側のorder byを削除する :

    select d1.dummy
    from dual d1
    where d1.dummy in (
      select dummy
      from dual d2
    )
    order by d1.dummy;
    
    DUMMY
    -----
    X     
    

    )が表示されることを期待しています そのorder byの代わりに 、したがって、エラーが何が間違っているかがわかれば、エラーはある程度意味があります。しかし、それは実際にはそれを絞り込むのに役立ちません。

    ちなみに、これはOracleサポートドキュメント731577.1で参照されています:

    ORA-00907: missing right parenthesis ORDER BYを使用する場合 サブクエリの句。 ORDER BYの場合 句が削除され、クエリはエラーなしで実行されます。

    ...
    これは、バグ4944718 ORDER BYで予想される動作です。 行の順序は外部クエリに渡され、影響がないため、サブクエリでは機能しないはずです。

    インラインビューでは許可/無視されますが、ネストされたサブクエリでは許可されません。 (それでもエラーがスローされない例外があるかもしれませんが...)




    1. 2つのテーブル間の差異を返すSQLクエリ

    2. Oracle ORA-12154:TNS:サービス名エラーを解決できませんでしたか?

    3. PostgreSQL9.2.1でトリガー呼び出しのループを回避する方法

    4. 角かっこ文字を含むSQLServerLIKE