Oracle エラーの対応方法・解決方法を解説します

ORA-00904

エラーメッセージ  

 ORA-00904: <文字列>: 無効な識別子です。
 ORA-00904: 列名が無効です。
 ORA-00904: string: invalid identifier
 ORA-00904: invalid column name
 
 

基本的なエラーの内容  

SQLで指定されている列名または文字列が正しく表記されていない場合に発生します。

 
 

確認事項および対応  

・通常のSQLで発生する場合は列名、文字列、表名などに使用しているシングルクォーテーション、ダブルクォーテーションの対応が正しいか確認する。
・PL/SQL、動的SQLなどでこのエラーが発生する場合は、特にシングルクォーテーション、ダブルクォーテーションの役割としての対応が正しいか確認する。(以下の詳細参照)
・プログラムやツールなどでこのエラーが発生する場合、SQL*Plusで同じSQLをコピーペーストで実施すると*マークから該当箇所が明確になる場合もある。
・エラーが発生しているデータベースでデータベースリンクを使用しており、ORA-904に以下のエラーが伴う場合
ORA-02063: 先行のエラー・メッセージを参照してください <db_link名>。
以下のコマンドをしようすることで回避できる可能性がある。
ALTER SESSION SET EVENTS '10176 TRACE NAME CONTEXT FOREVER, LEVEL 1';

 
 

詳細  

以下に例を示す

通常のSQLの例

SQL> desc test1
 名前             NULL?    型
 --------------- -------- -------------------
 NO                       NUMBER(10)
 NAME                     VARCHAR2(20)
SQL> select no,name from test1
 2  where name = "HOGE";
where name = "HOGE"
             * 
行2でエラーが発生しました。:
ORA-00904: "HOGE": 無効な識別子です。
--> シングルクォーテーションをダブルクォーテーションにしてしまっている
SQL> select no,name from test1
  2  where nama = 'HOGE';
where nama = 'HOGE'
     *
行2でエラーが発生しました。:
ORA-00904: "NAMA": 無効な識別子です。
--> 列名を間違えている

以下は動的SQLの例

DECLARE
  v_no     NUMBER;
  v_name   VARCHAR2(20);
  str1   VARCHAR2(10);

BEGIN
  str1 := 'HOGE';
  EXECUTE IMMEDIATE 'SELECT t1.no, t1.name FROM test1 t1 WHERE t1.no = 1  AND t1.name = ' || str1 || '';

END;
/

上記は 「ORA-00904: "HOGE": 無効な識別子です。」となる
SQLの最後を以下のようにする必要がある

t1.name = ''' || str1 || '''';

最初の3つについて1つめの ' はエスケープ、次はstr1の為の手前シングルクォーテーション、次が「EXECUTE IMMEDIATE 'SELECT...」に対応する文字列の終了。
後ろの4つについて1つめは文字列の開始、2つめはエスケープ、3つ目はstr1の為の後ろシングルクォーテーション、最後が文字列の終了である。

ORA-904は予約語をオブジェクト名に使用した場合にも発生する。
予約語はV_RESERVED_WORDS表のKEYWORD列でで確認可能

SQL> select * from V$RESERVED_WORDS;
KEYWORD                            LENGTH R R R R D
------------------------------ ---------- - - - - -
NOMONITORING                           12 N N N N N
RECORDS_PER_BLOCK                      17 N N N N N
CASCADE                                 7 N N N N N
DYNAMIC_SAMPLING                       16 N N N N N
COLUMN_STATS                           12 N N N N N
GROUPS                                  6 N N N N N
NO_PX_JOIN_FILTER                      17 N N N N N
CONSTRAINT                             10 N N N N N
NO_STATS_GSETS                         14 N N N N N
SWAP_JOIN_INPUTS                       16 N N N N N
NOORDER                                 7 N N N N N
TRIGGERS                                8 N N N N N
:
:
 
 

関連エラー  

ORA-00911: 文字が無効です。
ORA-01756: 引用符付き文字列が正しく終了していません
PLS-00103: 記号""が見つかりました。 次のうちの1つが入るとき:

 
 

powered by Quick Homepage Maker 3.66
based on PukiWiki 1.4.7 License is GPL. QHM

最新の更新 RSS  Valid XHTML 1.0 Transitional