2016-08-29 13 views
2

私は潜在的な列のリストを持っており、特定の列が存在するかどうかを確認できます。SQLに存在する列を確認する方法

SELECT null 
    FROM user_tab_columns 
    WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN' 

複数の列をテストするにはどうすればよいですか?つまり、正確な構文が何であるかは不明です。

SELECT null, null, null 
    FROM user_tab_columns 
    WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN' 
    or column_name = 'MYCOLUMN1' or column_name = 'MYCOLUMN2' 
+0

「DESCRIBE user_tab_columns」を使用できませんでしたか? – Angelo

+0

あなたは何をしようとしているのか明確にすることはできますか?ここで期待される結果は何ですか? – Mureinik

+0

私は基本的には、列が存在するかどうかによって真または偽を出力したいだけです。私はSQLに新しいと私はイムは何を使用しようとしていると思うPythonで行う。 – SharpObject

答えて

1

に役立つことを願って、私は単一の列、column_nameでテーブルを作成しました。私は、テーブルEMPのの存在をSCOTTスキーマでテストします。私はすべての表、列、およびスキーマ名は大文字であると仮定します(すべてのカタログ文字列の値は大文字です)。そうでないと、大文字と小文字を区別しない比較が必要になります。この例では、現在のユーザーがSCOTTスキーマ(ほとんどのOracleインストールで検出される標準スキーマ)にアクセスし、USER_TAB_COLUMNS(現在のユーザーの表のみを参照)ではなくALL_TAB_COLUMNSという表を使用しています。

with 
    potential_columns (column_name) as (
     select 'EMPNO' from dual union all 
     select 'NAME' from dual union all 
     select 'MANAGER' from dual union all 
     select 'DEPTNO' from dual 
    ) 
select p.column_name, 
     case when t.column_name is null then 'FALSE' else 'TRUE' end 
      as column_exists_in_table 
from potential_columns p left outer join 
    (select column_name from all_tab_columns 
     where owner = 'SCOTT' and table_name = 'EMP') t 
on p.column_name = t.column_name 
; 

COLUMN_NAME COLUMN_EXISTS_IN_TABLE 
----------- ---------------------- 
EMPNO  TRUE 
DEPTNO  TRUE 
MANAGER  FALSE 
NAME  FALSE 
1

たぶん、このコードは有用であろう(私は確信しているがなければならない、より良い解決策):

select count(table_name) from all_tab_columns where column_name = 'YOUR_COLUMN'; 

つ以上のcolunmのためにこれを試してみてください。

select count(table_name) from all_tab_columns where column_name in ('YOUR_COLUMN_1','YOUR_COLUMN_2') 

このリターンをテーブルが存在しない場合は0。

私はここであなた

+0

したがって、複数の列のIdをテストしたい場合は、どのように1つのSQL文でそれを実行できますか? – SharpObject

+0

@ SharpObject答えを編集しました.2番目の例を試してみてください。 –

+0

クール、どのようなものが存在しないのかわかる方法はありますか?これはちょうどいくつ – SharpObject

0

は今、あなたはANDは、Oracle SQLでORよりも優先されて、それは、次のようなものを実行しますあなたのクエリに来て、正しい答えを得ました。

SELECT null, null, null 
    FROM user_tab_columns 
    WHERE (table_name = 'MYTABLE' and column_name = 'MYCOLUMN') <-- MYCOLUMN in MYTABLE 
    or column_name = 'MYCOLUMN1'         <-- MYCOLUMN1 in ANYTABLE 
    or column_name = 'MYCOLUMN2'         <-- MYCOLUMN2 in ANYTABLE 
関連する問題