回答:
特定の列を持つすべてのテーブルを検索するには:
select owner, table_name from all_tab_columns where column_name = 'ID';
4つの列の一部またはすべてを含むテーブルを検索するには:
select owner, table_name, column_name
from all_tab_columns
where column_name in ('ID', 'FNAME', 'LNAME', 'ADDRESS');
4つの列がすべて含まれている(欠落していない)テーブルを検索するには:
select owner, table_name
from all_tab_columns
where column_name in ('ID', 'FNAME', 'LNAME', 'ADDRESS')
group by owner, table_name
having count(*) = 4;
column_name
+ like
:あなたは必ず正確な名前のいないのであればselect owner, table_name, column_name from all_tab_columns where column_name like 'someField%';
必要なデータは「cols」メタデータテーブルにあります。
SELECT * FROM COLS WHERE COLUMN_NAME = 'id'
これにより、必要な列がすべて含まれているテーブルのリストが表示されます。
select distinct
C1.TABLE_NAME
from
cols c1
inner join
cols c2
on C1.TABLE_NAME = C2.TABLE_NAME
inner join
cols c3
on C2.TABLE_NAME = C3.TABLE_NAME
inner join
cols c4
on C3.TABLE_NAME = C4.TABLE_NAME
inner join
tab t
on T.TNAME = C1.TABLE_NAME
where T.TABTYPE = 'TABLE' --could be 'VIEW' if you wanted
and upper(C1.COLUMN_NAME) like upper('%id%')
and upper(C2.COLUMN_NAME) like upper('%fname%')
and upper(C3.COLUMN_NAME) like upper('%lname%')
and upper(C4.COLUMN_NAME) like upper('%address%')
別のスキーマでこれを行うには、次のように、テーブルの前にスキーマを指定します。
SELECT * FROM SCHEMA1.COLS WHERE COLUMN_NAME LIKE '%ID%';
多くのスキーマの検索を1つの出力結果に結合したい場合は、次のようにします。
SELECT DISTINCT
'SCHEMA1' AS SCHEMA_NAME
,TABLE_NAME
FROM SCHEMA1.COLS
WHERE COLUMN_NAME LIKE '%ID%'
UNION
SELECT DISTINCT
'SCHEMA2' AS SCHEMA_NAME
,TABLE_NAME
FROM SCHEMA2.COLS
WHERE COLUMN_NAME LIKE '%ID%'
SELECT * FROM COLS
私のスキーマから何も返しません。テーブルに対する選択権限しかありません。COLSで表示するには、選択だけでは不十分ですか?
select * from schema1.cols
私に与えますtable or view does not exist
エラーを。権限の設定方法と関係があるのでしょうか?
列名を正確に知っている場合、列名を検索するには、以下のクエリを使用します。
select owner,table_name from all_tab_columns where upper(column_name) =upper('keyword');
以下の正確な列の使用法がわからない場合に列名を検索するには:
select owner,table_name from all_tab_columns where upper(column_name) like upper('%keyword%');
これはfindcol.sqlに保存したもので、SQLPlus内から簡単に実行できます。
set verify off
clear break
accept colnam prompt 'Enter Column Name (or part of): '
set wrap off
select distinct table_name,
column_name,
data_type || ' (' ||
decode(data_type,'LONG',null,'LONG RAW',null,
'BLOB',null,'CLOB',null,'NUMBER',
decode(data_precision,null,to_char(data_length),
data_precision||','||data_scale
), data_length
) || ')' data_type
from all_tab_columns
where column_name like ('%' || upper('&colnam') || '%');
set verify on