私はそれを修正する最良の方法についてはわかりませんが、面白いエラーが発生しました。次のブロックを考える: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'
を使ってみましたが、何の効果もありませんでした。
おかげ
動的クエリですか?もう1つは追加しないでください。条件付きコンパイル(可能な場合) – micklesh
エラーを無効にする代わりに、その列が実際にテーブルに存在すること、またはそのテーブルに対して明示的なSELECT許可があることを確認するのはなぜですか? – ruudvan
@mickleshは返事をありがとう、私はすでにあなたの提案と同じ方法を見つけました。アレイに大量に収集して配列をループする別の動的クエリ –