복붙노트

[SQL] 특정 열 이름을 가진 테이블에 대한 Oracle 데이터베이스를 검색?

SQL

특정 열 이름을 가진 테이블에 대한 Oracle 데이터베이스를 검색?

우리는 많은 테이블이 큰 Oracle 데이터베이스를 가지고있다. 내가 쿼리하거나 특정 열 이름을 가진 모든 테이블이 있는지 찾기 위해 검색 할 수있는 방법이 있나요?

아이디, FNAME, LNAME, 주소 : IE 나에게 열이있는 모든 테이블을 보여

상세 저는 추가 깜빡 : 나는 다른 스키마를 검색 할 수 있어야합니다. 내가 통해 검색 할 필요가 테이블을 소유하지 않은 연결하는 데 사용해야 하나.

해결법

  1. ==============================

    1.특정 열을 가진 모든 테이블을 확인하는 방법은 다음과 같습니다

    특정 열을 가진 모든 테이블을 확인하는 방법은 다음과 같습니다

    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;
    
  2. ==============================

    2.당신이 원하는 데이터는 "콜드"메타 데이터 테이블에 있습니다 :

    당신이 원하는 데이터는 "콜드"메타 데이터 테이블에 있습니다 :

    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%'
    
  3. ==============================

    3.당신이 열 이름을 정확하게 알고있는 경우 쿼리 아래의 열 이름 사용을 검색하려면

    당신이 열 이름을 정확하게 알고있는 경우 쿼리 아래의 열 이름 사용을 검색하려면

    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%');
    
  4. ==============================

    4.여기에 우리가 SQLPLUS 내에서 쉽게 실행할 수 있도록 우리가 findcol.sql에 떨어져 저장했는지 하나입니다

    여기에 우리가 SQLPLUS 내에서 쉽게 실행할 수 있도록 우리가 findcol.sql에 떨어져 저장했는지 하나입니다

    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
    
  5. from https://stackoverflow.com/questions/1953239/search-an-oracle-database-for-tables-with-specific-column-names by cc-by-sa and MIT license