2012-06-13 6 views
1
exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE); 

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) FROM all_OBJECTS WHERE 
OWNER = 'USERNAME' AND OBJECT_TYPE = 'TABLE'; 

이러한 명령을 실행할 때 불행히도 각 테이블 다음에 alter 문을 가져옵니다. DDL을 모든 테이블에 대해 생성 한 다음 제약 조건을 설정하기 위해 alter 문을 사용하는 것을 선호합니다. 현재 참조되는 테이블이 아직 작성되지 않았기 때문에 alter 문이 실행되고 일부 테이블에 대해 실패합니다.GET_DDL에 CONSTRAINTS_AS_ALTER을 (를) 올바르게 사용하려면 어떻게해야합니까?

select dbms_metadata.get_ddl('CONSTRAINT',constraint_name) from user_constraints; 

하지만이 어떻게 든 전혀 어떤 제약 조건을 생성하지 GET_DDL에게하지 않을 것을 사용하기 :

나는이 명령을 보았는가?

테이블을 올바른 순서로 만들 수있는 방법이 있습니까?

감사합니다.

exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', FALSE); 

는 그런 제약 DDL을 실행하지만 where constraint_type = 'R' :

답변

2

당신은 실행하여 참조 무결성 제약 조건을 생성하지 GET_DDL을 알 수 있습니다. 모든 제약 조건을 별도로 실행하고 싶지 않으면 외래 키보다 먼저 기본 키를 생성하고 동일한 종속성 문제로 실행해야합니다.

변환 매개 변수 목록은 here을 참조하십시오.

관련 문제