Atomic Habits

오라클 전체 테이블, 컬럼 조회 (전체 데이터 수, 전체 컬럼 검색) 본문

IT/SQL

오라클 전체 테이블, 컬럼 조회 (전체 데이터 수, 전체 컬럼 검색)

체계성 2022. 1. 7. 22:22

출처 : https://intro0517.tistory.com/157

 

오라클 내의 전체 테이블 또는 컬럼을 조회하려면 SYS내의 VIEW를 이용하면됩니다.

 

1. ALL_TABLES

- 로그인 된 계정의 권한으로 접근할 수 있는 모든 테이블들

- 예 ) 테이블명에 "테스트"를 포함한 테이블 검색 : 

        SELECT * FROM ALL_TABLES WHERE LIKE '%테스트%';

 

2. USER_TABLES

- 로그인 된 계정이 소유하고 있는 테이블들 

  SELECT * FROM ALL_TABLES WHERE OWNER = '로그인된계정' 과 같다.

 

3. ALL_TAB_COLUMNS

- 로그인 된 계정의 권한으로 접근할 수 있는 모든 테이블 내의 컬럼들

- 예 ) 컬럼명에 "테스트"를 포함한 컬럼 검색

        SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%테스트%'

 

4. USER_TAB_COLUMNS

- 로그인된 계정이 소유하고 있는 테이블들

  SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER = '로그인된계정' 과 같다.

 

 

 

위 테이블들을 이용해서 여러 응용이 가능합니다.

그런데..... 속도는 느려요...ㅋㅋ
그대로 일일이 노가다 해서 찾는거 보다는 좋겠죠?

 

 

응용 - 1 ) 데이터베이스 전체 데이터 수 구하기 - 아래의 쿼리로 조회된 값들을 이어서 쿼리문을 만들 수 있습니다.

 

[쿼리문 만들기 위한 조회]

 

SELECT 'SELECT (' FROM DUAL UNION ALL

SELECT '(SELECT count(*) cnt  FROM '||TABLE_NAME||') +  '  FROM USER_TABLES UNION ALL

SELECT '0) TOTAL_COUNT FROM DUAL; ' FROM DUAL;

 

[조회된 결과값으로 쿼리만들기]

 

SELECT (

(SELECT count(*) cnt  FROM T_CNKC_INTG_PRSN_INFO01L1_0329) +  

(SELECT count(*) cnt  FROM T_CNKC_INTG_DPRT01M1_B) +  

...

0) TOTAL_COUNT FROM DUAL; 

 

 

응용 - 2 ) 데이터베이스 전체 컬럼에서 원하는 데이터 검색 - 아래의 쿼리로 조회된 값들을 이어서 쿼리문을 만들 수 있습니다.

 

[쿼리문 만들기 위한 조회]

 

SELECT 'SELECT count('||COLUMN_NAME||') cnt, '''||TABLE_NAME||'.'||COLUMN_NAME||''' target, TO_CHAR('||COLUMN_NAME||') contents FROM '||TABLE_NAME||' WHERE TO_CHAR('||COLUMN_NAME||') like ''%'||'찾을내용'||'%'' 

GROUP BY '||COLUMN_NAME||'

UNION ALL' as query FROM USER_TAB_COLUMNS

WHERE COLUMN_NAME like '%RTUR_ID%'

ORDER BY TABLE_NAME,COLUMN_ID

 

[조회된 결과값으로 쿼리만들기]

 

SELECT count(RTUR_ID) cnt, 'T_CNKC_INTG_USER01H1.RTUR_ID' target, TO_CHAR(RTUR_ID) contents FROM T_CNKC_INTG_USER01H1 WHERE TO_CHAR(RTUR_ID) like '%찾을내용%' 

GROUP BY RTUR_ID

UNION ALL

SELECT count(RTUR_ID) cnt, 'T_CNKC_INTG_USER01H1_1114.RTUR_ID' target, TO_CHAR(RTUR_ID) contents FROM T_CNKC_INTG_USER01H1_1114 WHERE TO_CHAR(RTUR_ID) like '%찾을내용%' 

GROUP BY RTUR_ID

UNION ALL

SELECT count(RTUR_ID) cnt, 'T_CNKC_INTG_USER01M1.RTUR_ID' target, TO_CHAR(RTUR_ID) contents FROM T_CNKC_INTG_USER01M1 WHERE TO_CHAR(RTUR_ID) like '%찾을내용%' 

GROUP BY RTUR_ID

UNION ALL

...

마지막 UNION ALL 삭제

 
Comments