底辺SEの備忘録

スキル無しの底辺です。参考になりません。

特定の列名が存在する(しない)テーブルの一覧を表示するSQL(Oracle版)

概要

Oracleで特定の列名が存在するテーブル(しない)の一覧を表示するSQL

方法

以下で取得可能と思われる。。。
TESTスキーマ内の列名COL1が存在するテーブルを抽出

SELECT TABLE_NAME  FROM DBA_TABLES A WHERE OWNER='TEST'
AND EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE
A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1'
)

TESTスキーマ内の列名COL1が存在しないテーブルの一覧の抽出

SELECT TABLE_NAME  FROM DBA_TABLES A WHERE OWNER='TEST'
AND NOT EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE
A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1'
)

確認

テーブル定義

SQL> desc test1
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER

SQL> desc test2
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER
 COL2                                               NUMBER
 COL3                                               NUMBER

SQL> desc test3
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL2                                               NUMBER

SQL> desc test4
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL2                                               NUMBER
 COL3                                               NUMBER
 COL4                                               NUMBER

SQL> desc test5
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10)
 COL2                                               VARCHAR2(10)

SQL> desc test6
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL2                                               VARCHAR2(10)
 COL3                                               VARCHAR2(10)

SQL>

実行結果

SQL> SELECT TABLE_NAME  FROM DBA_TABLES A WHERE OWNER='TEST'
  2  AND EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE
  3  A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1'
  4  )
  5  ;

TABLE_NAME
--------------------------------------------------------------------------------
TEST1
TEST2
TEST5

SQL> SELECT TABLE_NAME  FROM DBA_TABLES A WHERE OWNER='TEST'
  2  AND NOT EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE
  3  A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1'
  4  );

TABLE_NAME
--------------------------------------------------------------------------------
TEST3
TEST4
TEST6