これを実行する別の方法は、エラー処理である:
declare v_sql varchar(1000);
declare col_missing integer default 0;
declare col_does_not_exist condition for sqlstate '42703';
declare continue handler for col_does_not_exist set col_missing = 1;
set v_sql = 'select table.foo from table';
execute immediate v_sql;
if col_missing = 1 then
--Do something if column foo doesn't exist.
end if;
このメソッドは、セッションテーブル上で動作する、とあなたはまた、あなたはそれが表であるかどうかわからない場合でも、オブジェクトの上にそれを使用することができます
foo
という別のオブジェクト(変数など)が存在すると、テストが中断されるため、列名ではなくtable.foo
を指定することが重要です。
この続行ハンドラは、スコープ内に見つからない列のその他のエラーをマスクします。そのため、スコープを実行したいテストだけに限定することをお勧めします。
答えをいただきありがとうございます。私は、特定のスキーマのテーブルをチェックしたいと思います。私はあなたが示唆した行を追加しようとしましたが、クエストは何も返しません(私が知っている列の名前を与えました)。 クエリがどのように機能するかを少し教えてください。 ありがとう –
申し訳ありませんが、クエストは*リクエストです –
あなたを迷惑にしているかもしれないのは、where句の 'TBNAME'部分にスキーマを追加しないということです。たとえば、 'SCH.TAB1'や' SCH.TAB2'の中にあるかもしれない 'UPDATE_TIMESTAMP'という列を探していて、それが' SCH.TAB3'にあるかもしれないと思います。クエリは 'SELECT STRIP(TBCREATOR)|| '。' || STRIP(TBNAME)SYSIBM.SYSCOLUMNS FROM WHERE NAME = 'UPDATE_TIMESTAMP' とTBNAME IN( 'TAB1'、 'TAB2'、 'TAB3') AND TBCREATOR =「SCH'' – bhamby