2011-01-14 16 views
6

Oracle'da, ertelenmiş kısıtlamalar yalnızca taahhüt noktasında kontrol edilir.sütun geçersiz degilrable

NOT NULL kısıtlaması olan bir durumda DEFERRABLE deyiminin anlamı nedir?

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

Örneğin bu ifadelere sonra aşağıdaki kod

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

işe düşündüm Ama öyle değil.

İki tanım arasındaki fark nedir?

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

cevap

10

Burada iki seçenek vardır. Ya tanımladığınız UPDATE deyimi yapmadan önce çalıştırılması gerekir

SET CONSTRAINTS ALL DEFERRED; 

Bu aşağıda gösterilen komutunu kullanarak kısıtlama işlem içinde ertelenmesine ayarlamanız gerekir.

Alternatif bunlardan birini yaptıktan sonra

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

tablo tanımında INITIALLY DEFERRED olmak sınırlaması ayarlayabilirsiniz, o zaman söz konusu olan DML çalıştırmak mümkün olmalıdır.

+1

Evet, haklısınız. INITIALLY DEFERRED ile kodum çalışır. Teşekkürler. –

İlgili konular