"SET FORINE_KEY_CHECKs = 0;" Oracle Equivalent
외부 키 제약 조건의 체크를 비활성화하는 Mysql 특정 명령어와 동등한 것이 있습니까?
SET FOREIGN_KEY_CHECKS = 0;
Oracle에는 모든 제약 조건을 한 번에 비활성화하는 명령이 없습니다.
그러나 테이블을 떨어뜨리는 상황에서 제약 조건을 비활성화하려는 것 같습니다.이 경우 절을 사용하여 참조 제약 조건을 테이블과 함께 다른 테이블에서 삭제할 수 있습니다.
예는 다음과 같습니다.
SQL> CREATE TABLE t1 (ID NUMBER PRIMARY KEY);
Table created
SQL> CREATE TABLE t2 (ID NUMBER REFERENCES t1);
Table created
SQL> INSERT INTO t1 VALUES (1);
1 row inserted
SQL> INSERT INTO t2 VALUES (1);
1 row inserted
SQL> -- this fails because of the foreign key
SQL> DROP TABLE t1;
ORA-02449: unique/primary keys in table referenced by foreign keys
SQL> DROP TABLE t1 CASCADE CONSTRAINTS;
Table dropped
SET FOREIGN_KEY_CHECKS = 0;
세션 기반입니다.Oracle 환경에서는 순환 참조가 있을 때에만 이 작업을 수행해야 한다는 것을 상상할 수 있습니다.
이것이 당신이 하고 싶은 것이라고 당신은 말했습니다:
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE table1;
DROP TABLE table2;
SET FOREIGN_KEY_CHECKS = 1;
TABLE1은 TABLE2를 참조한 외래키를 가지고 있고 TABLE2는 TABLE1을 참조한 외래키를 가지고 있다고 가정합니다.
그렇다면 무디즈의 대답이 맞습니다.테이블을 놓기 전에 외부 키를 비활성화하려면 다음과 같이 하십시오.
alter table table1 disable constraint <constraint_name>;
alter table table2 disable constraint <constraint_name>;
drop table table1;
drop table table2;
세션 기간 동안 모든 외부 키를 비활성화하는 것은 의미가 없습니다. 두 키에만 관심이 있으며, 두 키 모두 테이블과 함께 삭제됩니다.
모든 외부 키를 비활성화하고 싶지 않을 것입니다.
제가 이것에 대해 생각할 수 있는 유일한 다른 맥락은 순환 참조에 무언가를 삽입하고 싶은 경우이며, 이 경우 제약 조건을 DERFERABLE로 선언할 것입니다.이는 DML을 수행하는 것이 아니라 거래가 끝날 때 제약 조건 검사를 수행한다는 것을 의미합니다.
참고 자료가 원형이 아니면 다른 순서로 테이블을 떨어뜨리기만 하면 됩니다.
외부 키를 비활성화하기 위해 쿼리를 요청하는 경우 다음을 시도합니다.
테이블 변경 마이테이블
제약 조건 fk_mytable을 비활성화합니다.
언급URL : https://stackoverflow.com/questions/17233504/set-foreign-key-checks-0-oracle-equivalent
'programing' 카테고리의 다른 글
다대다로 질문하는 방법? (0) | 2023.10.27 |
---|---|
XML 문자열을 개체로 변환 (0) | 2023.10.27 |
Oracle JDBC 및 Oracle CHAR 데이터 유형 (0) | 2023.10.27 |
jQuery로 현재 등급의 디브를 받으려면 어떻게 해야 합니까? (0) | 2023.10.27 |
각도 - 웹소켓 및 $rootScope.apply() (0) | 2023.10.27 |