2012-01-05 9 views

答えて

5

使用SYSCAT.COLUMNS catalog view

SELECT TABNAME 
FROM SYSCAT.COLUMNS 
WHERE 
    TABNAME IN ('table name 1', 'table name 2') AND 
    COLNAME = 'column_name'; 
8

DB2 z/OSは9.1とLUW 9.7でテスト:あなたが唯一の特定のスキーマからの結果をしたい場合は

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME) 
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col' 
    AND TBNAME IN ('list', 'of', 'tables') 

あなたが最後にAND TBCREATOR = 'your_schema'を追加することができますクエリ。

+0

答えをいただきありがとうございます。私は、特定のスキーマのテーブルをチェックしたいと思います。私はあなたが示唆した行を追加しようとしましたが、クエストは何も返しません(私が知っている列の名前を与えました)。 クエリがどのように機能するかを少し教えてください。 ありがとう –

+0

申し訳ありませんが、クエストは*リクエストです –

+0

あなたを迷惑にしているかもしれないのは、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

0

これを実行する別の方法は、エラー処理である:

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を指定することが重要です。

この続行ハンドラは、スコープ内に見つからない列のその他のエラーをマスクします。そのため、スコープを実行したいテストだけに限定することをお勧めします。

関連する問題