set constraints all deferred|immediate的作用

    技术2022-05-11  129

    这个跟你添加约束的时候有关,约束有三个选项:DEFERRABLE INITIALLY DEFERREDDEFERRABLE INITIALLY IMMEDIATENOT DEFERRABLE默认的话是第三种,而第三中是immediate的,并不受set constraint影响例如:以一般方式添加的约束SQL> create table t1(a int);Table created.SQL> alter table t1 add constraint pk unique(a);Table altered.SQL> select deferrable from dba_constraints where owner='GOWIN' and constraint_name='PK';DEFERRABLE--------------NOT DEFERRABLESQL> create or replace procedure tes  2  as  3  begin  4    insert into t1 values (1);  5    insert into t1 values (1);  6  end;  7  /Procedure created.SQL> set constraints all deferred;constraint set.SQL> exec tesBEGIN tes; END;*ERROR at line 1:ORA-00001: unique constraint (GOWIN.PK) violatedORA-06512: at "GOWIN.TES", line 5ORA-06512: at line 1然后以另两种方式中的一种添加约束的方式SQL> drop table t1;Table dropped.SQL> create table t1(a int);Table created.SQL> alter table t1 add constraint pk unique(a) DEFERRABLE initially deferred;Table altered.SQL> select deferrable from dba_constraints where owner='GOWIN' and constraint_name='PK';DEFERRABLE--------------DEFERRABLESQL> create or replace procedure tes  2  as  3  begin  4    insert into t1 values (1);  5    insert into t1 values (1);  6  end;  7  /Procedure created.SQL> exec tesPL/SQL procedure successfully completed.SQL> select * from t1;         A----------         1         1SQL> commit;commit*ERROR at line 1:ORA-02091: transaction rolled backORA-00001: unique constraint (GOWIN.PK) violated


    最新回复(0)