오라클 DBMS_METADATA.GET_DDL 관련 0 0 2,380

by bellpp [DB 기타] 오라클 DBMS_METADATA.GET_DDL [2021.07.16 10:11:17]


result1.png (9,645Bytes)
result2.png (11,058Bytes)

버전은 오라클 12c입니다.

오브젝트 DDL을 뽑기위해 아래와 같은 DBMS_METADATA.GET_DDL(object_type, object_name, owner) 사용하여서 추출하는데

간혹가다 오브젝트이름이 두번출력되는 함수와 프로시저가 생겨서 질문드립니다.

CREATE OR REPLACE NONEDITIONABLE PROCEDURE "TEST"."PCD_TBL_BLOB_INSERT" PCD_TBL_BLOB_INSERT

밑줄친 것과같이 프로시저 명은PCD_TBL_BLOB_INSERT인데, 유저와 오브젝트이름 그리고 오브젝트 이름이 한번더나와서 안나오게

하는 옵션이있는지 질문드립니다.

 

dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', false);  

dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE );

현재 이 두가지 옵션만 적용하여 추출중입니다.

 

추가로 DB툴은 dbeaver 사용하는데 

CREATE OR REPLACE NONEDITIONABLE PROCEDURE "TEST"."PCD_TBL_BLOB_INSERT" PCD_TBL_BLOB_INSERT

sqlplus에서는 해당 구문을 create 했을때 오류가발생하지만

dbeaver에서는 정상적으로 생성됩니다. 

sqlplus에서 procedure alias를 인식할 수 있는 옵션도 있는지 궁금합니다.

 

-----------------------------------------------------

추가로 최초 생성때 CREATE OR REPLACE PROCEDURE "TEST"."PCD_TBL_BLOB_INSERT" 이런식으로 만들면 

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) FROM DUAL 사용하여 DDL을 뽑으면 

CREATE OR REPLACE PROCEDURE "TEST"."PCD_TBL_BLOB_INSERT"

CREATE OR REPLACE PROCEDURE "SCHEMA"."OBJECTNAME" 형태

 

CREATE OR REPLACE PROCEDURE PCD_TBL_BLOB_INSERT 이런식으로 만들면

CREATE OR REPLACE PROCEDURE "TEST"."PCD_TBL_BLOB_INSERT" PCD_TBL_BLOB_INSERT

CREATE OR REPLACE PROCEDURE "SCHEMA"."OBJECTNAME" OBJECTNAME 출력됩니다.

-----------------------------------------------------

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) FROM DUAL 사용했을때 1번 결과처럼 DDL이 출력되길 원합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입