2016-05-24 5 views
0

私はそれを修正する最良の方法についてはわかりませんが、面白いエラーが発生しました。次のブロックを考える:PLSQLはエラーではないコンパイルエラーを無視します

PL/SQL:ORA-00904: "CONNECTIONDESCRIPTION":無効な識別子
ORA-06550:行40、列20:PL/

DECLARE 
     v_column_exists number := 0; 
     host_column_exists number := 0; 
     i number; 
    BEGIN 
     Select count(*) into v_column_exists from user_tab_cols where column_name = 'CONNECTIONDESCRIPTION' and table_name = 'NODES'; 

     if (v_column_exists = 1) then 
     Select count(*) into host_column_exists from user_tab_cols where column_name = 'HOST' and table_name = 'NODES'; 

     if (host_column_exists = 0) then 
      execute immediate 'alter table NODES add (Host varchar2(255))'; 
      for item in (select connectiondescription, code from nodes) loop 
      ... LOOP STUFF ... 
      end loop; 
     end if; 
     end if; 
    END; 

私は、次のような結果を得ますSQL:
ORA-06550を無視SQL文:行41、列20:PLS-00364:ループインデックス変数 'ITEM' 使用は

無効である任意のアイデアをどのようにこのエラーを取り除くには?列NODES.CONNECTIONDESCRIPTIONがデータベースに存在しない場合に問題が発生しますが、この場合forループは実行時には実行されません。私はこれらのエラーを無効にする必要がありますが、それを行う方法が見つかりませんでした。私はALTER SESSION SET PLSQL_WARNINGS='DISABLE:00904'を使ってみましたが、何の効果もありませんでした。

おかげ

+2

動的クエリですか?もう1つは追加しないでください。条件付きコンパイル(可能な場合) – micklesh

+3

エラーを無効にする代わりに、その列が実際にテーブルに存在すること、またはそのテーブルに対して明示的なSELECT許可があることを確認するのはなぜですか? – ruudvan

+0

@mickleshは返事をありがとう、私はすでにあなたの提案と同じ方法を見つけました。アレイに大量に収集して配列をループする別の動的クエリ –

答えて

0

正しいアプローチは、バルク、この配列を介して配列した後、ループにアイテムを収集する別のダイナミッククエリを使用することでした。

関連する問題