티스토리 뷰
오라클에선 DBMS_METADATA.GET_DDL을 통해 테이블, 인덱스, 뷰, 유저, 프로시저 생성에 관한 Create DDL을 쉽게 추출할 수 있습니다. 해당 기능은 oracle 9i 이상부터 지원하고 있습니다.
사용 예제
1. 테이블 DDL 추출
-- SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES') FROM DUAL;

2. 인덱스 DDL 추출
-- SELECT DBMS_METADATA.GET_DDL('INDEX','INDEX 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('INDEX','SYS_C007536') FROM DUAL;

테이블과 인덱스뿐만 아니라, 나머지 객체들도 위와 같은 방법으로 DDL 추출이 가능합니다. 따라서, 다음과 같이 정리할 수 있습니다.
-- SELECT DBMS_METADATA.GET_DDL('객체 유형','객체명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('TABLE','테이블 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('INDEX','인덱스 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('VIEW','뷰 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','프로시저 명') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','테이블스페이스 명') FROM DUAL;
...
응용하기
DDL을 추출할 때 Storage나 자잘구리한 내용들을 깔끔하게 정리하고 싶을 땐 DBMS_METADATA.SET_TRANSFORM_PARAM을 사용하여 DBMS_METADATA.GET_DDL에서 추출되는 DDL의 형식을 조정할 수 있습니다.
DECLARE
v_get_table_ddl clob;
BEGIN
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',false); -- STORAGE에 대한 정보 표시 여부
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',true); -- table, index 등의 세그먼트 속성 표시 여부
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true); -- DDL 문장 끝에 세미콜론을 추가할건지 결정
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PARTITIONING',true); -- 파티션 정보를 DDL에 포함할건지 여부
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',true); -- DDL을 읽을 사람이 보기 좋게 정렬해주는 옵션
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS',false); -- 제약 조건 포함 여부
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','ORA') INTO v_get_table_ddl FROM DUAL;
dbms_output.put_line(v_get_table_ddl);
END;

위에서 추출한 DDL 결과와 비교해서 보면 깔끔하게 정리된 것을 볼 수 있습니다.
'Database > Oracle' 카테고리의 다른 글
| [Oracle]SQL Loader로 TEXT파일 업로드 하기 (0) | 2025.02.20 |
|---|---|
| [Oracle]SELECT Query 결과 파일로 저장하기(SPOOL) (0) | 2025.01.25 |
| [Oracle]Linux(Oracle Linux 8)에 Oracle Database 19c 설치하기 (0) | 2025.01.23 |
| [Oracle]계정 생성 시 c## 제거하는 방법 (0) | 2025.01.12 |
| [Oracle]SCN(System Change Number) (1) | 2024.11.17 |
최근에 올라온 글
- Total
- Today
- Yesterday