7

Oracleでは、遅延制約はコミットの時点でのみチェックされます。

NOT NULL制約の場合のDEFERRABLE句の意味は何ですか?例えば

create table test(a number not null deferrable, b number);
insert into test(a,b) values (222, 111);
commit;

これらのステートメントの後、私は次のコードが機能すると思いました

update test set a = null where b = 111;
delete test where b = 111;
commit;

しかし、そうではありません。

2つの定義の違いは何ですか?

create table test1(a number not null deferrable, b number);
create table test2(a number not null, b number);
4

1 に答える 1

10

ここには2つのオプションがあります。以下に示すコマンドを使用して、トランザクション内で延期される制約を設定する必要があります

SET CONSTRAINTS ALL DEFERRED;

これは、UPDATE定義したステートメントを実行する前に実行する必要があります。

または、制約をINITIALLY DEFERREDテーブル定義に設定することもできます

create table test(a number not null initially deferred deferrable, b number);

これらのいずれかを実行すると、質問にあるDMLを実行できるようになります。

于 2011-01-14T10:39:26.387 に答える