일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- cygwin
- dba
- MySQL
- Network
- SQL
- bash
- sqlplus
- Oracle RAC
- 연산자
- oracle
- prompt
- fdisk
- rac
- perl string
- RHEL4
- grid
- solaris network
- php5
- command & perl
- mariaDB
- Linux
- memory
- Unix
- oracle install
- PERL
- perl + 정규표현식
- patch
- perl one-liner
- 오라클
- solaris
Archives
- Today
- Total
DATA 전문가로 가는 길
[SQL] 오라클 테이블레이아웃 조회 쿼리 본문
오라클 데이터베이스에 특정 사용자에 접속해서 테이블 정보를 조회해야 하는 경우가 생기는데 USER_TAB_COLUMNS, USER_TAB_COMMENTS, USER_CONSTRAINTS 딕셔너리를 이용하여 테이블 레이아웃 형태와 같이 뽑을 수 있습니다.
SELECT X.TABLE_NAME ,X.TABLE_COMMENTS ,X.COLUMN_NAME ,X.COLUMN_COMMENTS ,X.PK_FLAG ,X.FK_FLAG ,X.NULL_FLAG ,X.DATA_TYPE || X.DATA_LENGTH as COLUMN_DATA_TYPE FROM (SELECT A1.TABLE_NAME TABLE_NAME ,A1.TABLE_COMMENTS TABLE_COMMENTS ,A1.COLUMN_NAME COLUMN_NAME ,A1.COLUMN_COMMENTS COLUMN_COMMENTS ,(CASE WHEN B1.CONSTRAINT_TYPE = 'P' THEN 'Y' END) PK_FLAG ,(CASE WHEN B1.CONSTRAINT_TYPE = 'R' THEN 'Y' END) FK_FLAG ,A1.NULL_FLAG ,A1.DATA_TYPE ,A1.DATA_LENGTH ,A1.COLUMN_ID FROM (SELECT B.COMMENTS TABLE_COMMENTS ,A.TABLE_NAME TABLE_NAME ,C.COMMENTS COLUMN_COMMENTS ,A.COLUMN_NAME COLUMN_NAME ,(CASE A.NULLABLE WHEN 'Y' THEN 'Y' END) NULL_FLAG ,A.DATA_TYPE DATA_TYPE ,(CASE WHEN A.DATA_TYPE IN ('CHAR', 'VARCHAR2') THEN '(' || A.DATA_LENGTH || ')' WHEN A.DATA_TYPE = 'NUMBER' AND A.DATA_SCALE = 0 AND A.DATA_PRECISION IS NOT NULL THEN '(' || A.DATA_PRECISION || ')' WHEN A.DATA_TYPE = 'NUMBER' AND A.DATA_SCALE <> 0 THEN '(' || A.DATA_PRECISION || ',' || A.DATA_SCALE || ')' END) DATA_LENGTH ,A.COLUMN_ID FROM USER_TAB_COLUMNS A ,USER_TAB_COMMENTS B ,USER_COL_COMMENTS C WHERE (A.TABLE_NAME = B.TABLE_NAME) AND (A.TABLE_NAME = C.TABLE_NAME AND A.COLUMN_NAME = C.COLUMN_NAME -- AND A.TABLE_NAME like 'DIM%' /* [조건] 원하는 테이블만 조회 한다. */ )) A1 ,(SELECT A.TABLE_NAME, A.COLUMN_NAME, B.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS A ,USER_CONSTRAINTS B WHERE (A.CONSTRAINT_NAME = B.CONSTRAINT_NAME) AND B.CONSTRAINT_TYPE IN ('P', 'R')) B1 WHERE (A1.TABLE_NAME = B1.TABLE_NAME(+) AND A1.COLUMN_NAME = B1.COLUMN_NAME(+))) X ORDER BY X.TABLE_NAME, X.COLUMN_ID
'Data Architecture > SQL Query' 카테고리의 다른 글
[SQL] Oracle Pivot 함수를 사용한 동적 항목, 값 처리 (2) | 2015.11.18 |
---|---|
[SQL] 원격 서버 데이터 비교 자동 스크립트(PL/SQL) (0) | 2015.11.13 |
[SQL] 오라클(Oracle) External Table Auto Script(자동 생성기) (0) | 2013.11.21 |
[SQL] 오라클(Oracle) 패키지 내에서 사용하는 테이블 추출 방법 (2) | 2013.10.08 |
[SQL] 오라클 누적 곱 계산 방법 (0) | 2013.09.23 |
Comments