0

ORACLE データベースを使用しています。 編集

データベース内のすべてのテーブルではなく、リストに存在しないテーブルのみが必要です。

例: 私のデータベースには、次のテーブルが存在します。

a
b
c
d
e
r
s

私はテーブルのリストを与えられています:

a
b
c
v
h

その中から、データベースに存在しない(存在しない)テーブルを見つけたいと思っています。

つまり、a、b、c は、データベースに存在するテーブルです。したがって、これらのテーブルを除外すると、私の答えは次のようになります。

v and h 

私の答えは d,e,r,s ではありません

これを調べるためのクエリを作成するにはどうすればよいですか?

4

5 に答える 5

2

使用できます

SELECT a.table_name FROM (SELECT 'A' as table_name 
               FROM DUAL UNION
               SELECT 'B' as table_name 
               FROM DUAL UNION
               SELECT 'C' as table_name 
               FROM DUAL UNION
               SELECT 'V' as table_name 
               FROM DUAL UNION
               SELECT 'H' as table_name 
               FROM DUAL) a WHERE NOT EXISTS (
SELECT 1 FROM DBA_TABLES b where b.table_name=a.table_name)
于 2012-05-03T11:27:10.080 に答える
1

私はマイナス演算子(以下の要約)でそれを行います:

select table_name from table_list
minus
select table_name from db_tables
;

より完全に:

with table_list as 
(     select 'A' table_name from dual    
union select 'B' table_name from dual
union select 'C' table_name from dual
union select 'V' table_name from dual
union select 'H' table_name from dual
) 
, db_tables as
(     select 'A' table_name from dual
union select 'B' table_name from dual
union select 'C' table_name from dual
union select 'D' table_name from dual
union select 'E' table_name from dual
union select 'R' table_name from dual
union select 'S' table_name from dual
)
select table_name from table_list
minus
select table_name from db_tables
;
于 2012-05-03T12:19:28.777 に答える
1
WITH table_names AS ( 
   SELECT 'A' AS tname FROM DUAL
   UNION ALL
   SELECT 'B' FROM DUAL
   UNION ALL
   SELECT 'C' FROM DUAL
   UNION ALL
   SELECT 'D' FROM DUAL
   UNION ALL
   SELECT 'E' FROM DUAL
)
SELECT tn.tname
FROM table_name tn
WHERE NOT EXISTS (SELECT 1  
                  FROM all_tables at
                  WHERE tn.tname = at.table_name);

WITH 部分は、派生テーブル (「インライン ビュー」) を記述する別の (再利用可能な) 方法です。

于 2012-05-03T11:28:19.083 に答える
0
SELECT table_name FROM DBA_tables WHERE table_name IN (Yourlist comes here)

例えば

SELECT table_name FROM DBA_tables WHERE table_name NOT IN ('a','b','c');
于 2012-05-03T11:28:26.243 に答える
0

テーブルと sys.dbms_debug_vc2coll を使用して、リストから仮想列を作成できます。

次のようにしてください。

SELECT
    column_value AS missing_table_names
FROM
    TABLE(SYS.DBMS_DEBUG_VC2COLL('a','b','c','v','h'))
WHERE
    column_value NOT IN (
        SELECT
            table_name
        FROM
            ALL_TABLES
    );
于 2012-11-05T09:55:00.147 に答える