programing

Oracle - 테이블을 삭제하지 않고 테이블 제약 조건 삭제

megabox 2023. 9. 1. 20:44
반응형

Oracle - 테이블을 삭제하지 않고 테이블 제약 조건 삭제

대규모 Oracle 데이터베이스의 대량 마이그레이션을 수행하고 있습니다.이 작업의 첫 번째 단계는 나중에 테이블을 삭제하기 위한 준비로 테이블의 전체 로드 이름을 변경하는 것입니다. 하지만 현재는 테이블에 데이터를 보관해야 합니다.외부 키 제약 조건은 삭제해야 합니다. 해당 제약 조건은 데이터베이스의 나머지 부분에 연결해서는 안 됩니다.지금 삭제할 경우 구속조건을 캐스케이드할 수 있지만 이름을 변경하면 구속조건이 변경됩니다.

테이블 자체를 떨어뜨리지 않고 캐스케이드 제약 조건이 떨어지는 모든 제약 조건을 삭제할 수 있는 방법이 있습니까?

동적 SQL 및 데이터 사전을 사용하여 이 작업을 수행할 수 있습니다.

begin
    for r in ( select table_name, constraint_name
               from user_constraints
               where constraint_type = 'R' )
    loop
        execute immediate 'alter table '|| r.table_name
                          ||' drop constraint '|| r.constraint_name;
    end loop;
end;

테이블이 두 명 이상의 사용자에 의해 소유된 경우 DBA_CONSTARGS에서 드라이브해야 하며 투영 및 실행 문에 OWNER를 포함해야 합니다.모든 테이블보다 적게 터치하려면 이름에 패턴이 없는 한 WHERE 절에 목록을 지정해야 합니다.

제약 조건을 삭제하지 않고 사용하거나 다시 사용하도록 설정할 수 있습니다. 기사를 보세요.

언급URL : https://stackoverflow.com/questions/3701233/oracle-drop-table-constraints-without-dropping-tables

반응형