티스토리 뷰
개발자의 삶/Database(PostgreSQL, Redis, Oracle, ...)
[오라클] DB 관련 문서(엔티티/테이블 정의서, 테이블 목록 등) 작성
나RD 2019. 10. 14. 18:16728x90
산출물은 양식이 있는 것은 아니지만, 어딜가나 뽑는 데이터는 비슷한 것 같다.
엔티티 정의서나 테이블 정의서에 경우, 거의 뽑는 데이터가 비슷하기 때문에 한꺼번에 다 뽑아서 해도 상관 없다.
때에 따라 테이블 크기, 초기 사이즈, 크기를 얼만큼씩 증가 시킬 것인지 등등을 뽑는 경우도 있는데, 그러한 정보들은 그때 다시 뽑고나서 작성하는 것으로...
# 테이블 목록 조회
SELECT CASE WHEN INSTR(A.TABLE_NAME,'_CM_') > 0
THEN '공통'
END 구분
,A.TABLE_NAME 테이블명
,B.COMMENTS 코멘트
FROM USER_TABLES A
INNER JOIN USER_TAB_COMMENTS B
ON A.TABLE_NAME = B.TABLE_NAME
AND A.TABLE_NAME LIKE 'T_%' -- 정상적인 테이블 네이밍룰
AND INSTR(A.TABLE_NAME,'TMP') = 0 -- 테이블 목록 중에 불필요한 테이블을 걸러주기 위한 조건, 각 환경에 따라 불필요하거나 다른 조건이 필요할 수 있다.
AND INSTR(A.TABLE_NAME,'TEMP') = 0
AND INSTR(A.TABLE_NAME,'TEST') = 0
AND INSTR(A.TABLE_NAME,'BAK') = 0
ORDER BY A.TABLE_NAME
# 엔티티 정의서
-- 엔티티정의서
SELECT
--a.table_name AS 테이블명,
a.tab_cmt AS 테이블설명,
--a.column_name AS 컬럼명,
a.col_cmt AS 컬럼설명,
--a.data_type AS 데이터유형,
CASE WHEN INSTR(a.data_type,'CHAR') > 0
THEN 'C'
WHEN INSTR(a.data_type,'NUM') > 0
THEN 'N'
WHEN INSTR(a.data_type,'DATE') > 0 OR INSTR(a.data_type,'TIME') > 0
THEN 'D'
END AS 데이터유형,
a.DATA_LENGTH AS 데이터길이,
a.nullable AS null여부,
b.pos AS PK
--,a.column_id AS 컬럼순서,
--a.data_default AS 기본값
FROM
(
SELECT
s1.table_name,
s3.comments AS tab_cmt,
s1.column_name,
s2.comments AS col_cmt,
s1.data_type,
CASE
WHEN s1.data_precision IS NOT NULL THEN
data_precision
|| ','
|| data_scale
ELSE
to_char(s1.data_length)
END AS DATA_LENGTH,
nullable,
column_id,
data_default
FROM
user_tab_columns s1,
user_col_comments s2,
user_tab_comments s3
WHERE
s1.table_name = s2.table_name
AND s1.column_name = s2.column_name
AND s2.table_name = s3.table_name
AND S1.TABLE_NAME in (
-- 1.에서 뽑은 테이블 목록
)
) a,
(
SELECT
t1.table_name,
t2.column_name,
'PK' || position AS pos
FROM
(
SELECT
table_name,
constraint_name
FROM
user_constraints
WHERE
constraint_type = 'P'
) t1,
(
SELECT
table_name,
constraint_name,
column_name,
position
FROM
user_cons_columns
) t2
WHERE
t1.table_name = t2.table_name
AND t1.constraint_name = t2.constraint_name
) b
WHERE
a.table_name = b.table_name (+)
AND a.column_name = b.column_name (+)
ORDER BY
a.table_name,
a.column_id
# 테이블 정의서
-- 테이블정의서
SELECT
a.table_name AS 테이블명,
--a.tab_cmt AS 테이블설명,
a.column_name AS 컬럼명,
b.pos AS PK,
a.data_type AS 데이터유형,
a.DATA_LENGTH AS 데이터길이,
a.nullable AS null여부,
--,a.column_id AS 컬럼순서,
a.data_default AS 기본값,
a.col_cmt AS 컬럼설명
FROM
(
SELECT
s1.table_name,
s3.comments AS tab_cmt,
s1.column_name,
s2.comments AS col_cmt,
s1.data_type,
CASE
WHEN s1.data_precision IS NOT NULL THEN
data_precision
|| ','
|| data_scale
ELSE
to_char(s1.data_length)
END AS DATA_LENGTH,
nullable,
column_id,
data_default
FROM
user_tab_columns s1,
user_col_comments s2,
user_tab_comments s3
WHERE
s1.table_name = s2.table_name
AND s1.column_name = s2.column_name
AND s2.table_name = s3.table_name
AND S1.TABLE_NAME in (
-- 1.에서 뽑은 테이블 목록
)
) a,
(
SELECT
t1.table_name,
t2.column_name,
'PK' || position AS pos
FROM
(
SELECT
table_name,
constraint_name
FROM
user_constraints
WHERE
constraint_type = 'P'
) t1,
(
SELECT
table_name,
constraint_name,
column_name,
position
FROM
user_cons_columns
) t2
WHERE
t1.table_name = t2.table_name
AND t1.constraint_name = t2.constraint_name
) b
WHERE
a.table_name = b.table_name (+)
AND a.column_name = b.column_name (+)
ORDER BY
a.table_name,
a.column_id
반응형
'개발자의 삶 > Database(PostgreSQL, Redis, Oracle, ...)' 카테고리의 다른 글
[오라클] 디비링크 생성 (0) | 2019.11.13 |
---|---|
[오라클] 잡 생성 (0) | 2019.10.29 |
[ERwin] DDL script(Comment 포함) 추출하기 (0) | 2019.10.24 |
[오라클] 테이블 생성했는데, 기본 설정이 궁금하다! (1) | 2019.10.15 |
단기 속성 입문 현업 사용 MS-SQL SSMS 단축키 설정 정리 (0) | 2017.05.18 |
[MySQL] MySQL 64bit 설치 (2) | 2017.05.10 |
[MySQL] Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode ... (0) | 2017.05.10 |
[MS-SQL] 중국어 깨질 때 (0) | 2017.03.22 |