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

ORA-00936の欠落している式を解決する方法

    説明

    ORA-00936:式がありません これは、OracleSQLで作業するすべての人がしばらくの間直面したはずの一般的なエラーの1つです。これは通常、SQLステートメントで重要なことを省略した場合、つまり実行しようとしていたものの重要なチャンクを省略した場合に発生します

    参照 :Oracleドキュメント

    ORA-00936の原因:式がありません

    このOracleエラーは、主にSQLSELECTステートメントに関連しています。明らかな理由の1つは、選択した列のリストが欠落しているか、選択した列の式が不完全であるということです。

    ORA-00936欠落式エラーを解決するために実行するチェックリスト

    (1)selectステートメントに列をリストするのを忘れた場合に発生します

    Select from mrp_details;
    
    select from mrp_details;
    ERROR at line 1:
    ORA-00936: missing expression

    正しい方法は、選択する列をリストすることです

    Select col1,col2 from mrp_details; 

    (2)Distinctステートメントの使用法を間違えることがあります。次のステートメントはORA-00936で失敗します

    select distinct a, b,c,d, distinct e from tab_example
    where b=’ABCD’ and c =1 and d= ‘JOHN’
    ERROR at line 1:
    ORA-00936: missing expression

    2つの異なる句があることは意味がなく、エラーが発生します

    もう一つの例

    select a, b,c,d, distinct e from tab_example
    where b=’ABCD’ and c =1 and d= ‘JOHN’
    ERROR at line 1: ORA-00936: missing expression

    個別は最初にのみ使用できます

    したがって、正しいステートメントは

    select distinct a, b,c,d, e from tab_example
    where b=’ABCD’ and c =1 and d= ‘JOHN’

    (3)このエラーは、式の一部が省略されている場合に発生します。例としては

    select 2**8 from dual; 
    select 2**8 from dual;
    ERROR at line 1: ORA-00936: missing expression

    **演算子はPLSQLでは機能しますが、SQLでは機能しません。Power関数を使用する必要があるため、正しい方法は

    select power(2,3) from dual;
    POWER(2,3)
    --------
    8

    (4)別の例

    select dept_name||' '|| from dept;
    select dept_name||' '|| from dept
    ERROR at line 1: ORA-00936: missing expression

    ここで、連結演算子の後に列名を指定するのを忘れた場合、正しいSQLは次のようになります

    select dept_name||' '||dept_no from dept;

    (5)列のリストにコンマを追加する場合

    select dept_no, dept_name, ,dept_location from dept_table;
    select dept_no, dept_name, ,dept_location from dept_table;
    ERROR at line 1: ORA-00936: missing expression

    したがって、このエラーが発生したときにSQLステートメントを再確認し、よくある間違いをしていることを確認する必要があります

    (6)このエラーは、SQLステートメントでFromを省略した場合にも発生します

    select dept_no, dept_name, ,dept_location where dept_name like ‘A%’;
    select dept_no, dept_name, ,dept_location where dept_name like ‘A%’;
    ERROR at line 1: ORA-00936: missing expression

    ここでは、from句について言及していません。SELECTステートメントには3つの部分があります。「SELECT-> FROM-> WHERE
    where句は省略できますが、selectとfromが必要です

    select dept_no, dept_name, ,dept_location from dept_table where dept_name like ‘A%’;

    (7)以下のような挿入ステートメントでも発生する可能性があります

    insert into table1 (col1,col2) values as select col1,col2 from table2;
    ERROR at line 1: ORA-00936: missing expression

    このステートメントのような値は必要ありません

    insert into table1 (col1,col2) select col1,col2 from table2;

    (8)ユーザー定義関数とOracle関数を混同することがあります。そうすると、構文が混乱してエラーメッセージが表示される可能性があります。そのため、それらを避けてください。

    (9)Oracleにもいくつかのバグがあります
    (a)Bug:4567818 base Bug#:4192148 – unpublished on 9207
    (b)Bug:4212516(unpublished)onoracle10.1.0.4.0。
    これらのバグにより、SELECTONビューが失敗するとORA-00936エラーがスローされます。基本的に、SQLビューが「ビューMY_VIEWをselect t。*、other_tab_col from tab t、other_tabとして作成または置換」から作成されると、ORA-00936がスローされます。これにより、DBA_VIEWSで正しくないビュー定義が作成され、ORA-がスローされます。 00936および考えられるコアダンプ。バグを修正してORA-00936を解決するために、MetaLinkは適切なバージョンに対して次のソリューションを提供します。
    9.2.0.7の修正:パッチ4192148はSolaris(64ビット)およびAIX5Lベースのシステムで使用可能です(64ビット)10.1.0.4の修正:
    パッチ4212516は、ほとんどのプラットフォームで使用できます。

    一言で言えば、ORA-00936不足している表現 SQLステートメントを注意深くチェックすることで解決できます。

    関連記事
    ORA-00911:無効な文字
    ORA-03113:通信チャネルのファイルの終わり
    ORA-00257
    ORA-27154:起動中にpost/wait作成に失敗しました
    11g(FND_HISTOGRAM_COLS)でスキーマ統計を収集する外部テーブル
    ora-20001を使用するORA-29913
    同時マネージャー:cleanup_nodeがORA-01427のために失敗しました

    1. MySQLの最後の行を選択します

    2. レコードからHTMLタグを削除する

    3. 一連の日付の生成

    4. WindowsでPostgreSQLを起動するにはどうすればよいですか?