programing

"SET FORINE_KEY_CHECKs = 0;" Oracle Equivalent

css3 2023. 10. 27. 22:04

"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