[Sql] 특정 컬럼 이름을 가진 테이블을 Oracle 데이터베이스에서 검색 하시겠습니까?


Answers

원하는 데이터는 "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%';

많은 스키마 검색을 하나의 출력 결과로 결합하려는 경우 다음을 수행 할 수 있습니다.

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%'
Question

우리는 테이블이 많은 대형 Oracle 데이터베이스를 보유하고 있습니다. 특정 열 이름을 가진 테이블이 있는지 검색하거나 검색 할 수있는 방법이 있습니까?

IE는 열이있는 모든 테이블을 보여줍니다 : id, fname, lname, address

세부 사항 추가하지 않음 : 다른 스키마를 통해 검색 할 수 있어야합니다. 연결에 사용해야하는 것은 내가 검색해야하는 테이블을 소유하고 있지 않습니다.




dba_tab_columns에서 table_name을 선택하십시오. 여기서 column_name = 'THE_COLUMN_YOU_LOOK_FOR';