2011-01-14 15 views
6

W Oracle ograniczenia odroczone są sprawdzane tylko w punkcie zatwierdzenia.kolumna nie ma wartości odroczonej

Jakie jest znaczenie klauzuli DEFERRABLE w przypadku ograniczenia NOT NULL? Na przykład

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

Po tych sprawozdań myślałem następujący kod będzie działać

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

Ale tak nie jest.

Jaka jest różnica między dwiema definicjami?

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

Odpowiedz

10

Dostępne są dwie opcje. Albo trzeba ustawić ograniczenie zostać odroczone w ramach transakcji za pomocą polecenia pokazaną poniżej

SET CONSTRAINTS ALL DEFERRED; 

To powinno być prowadzone przed wykonaniem instrukcji UPDATE które zostały zdefiniowane.

Alternatywnie można ustawić ograniczenie się INITIALLY DEFERRED w definicji tabeli

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

Po wykonaniu jednej z tych rzeczy, powinieneś być w stanie uruchomić DML, które masz w pytaniu.

+1

Tak, masz rację. Z INICJALNYM DEFEROWANIEM mój kod działa. Dzięki. –

Powiązane problemy