Como validar as alterações de dados (constraints) apenas no final da transação?
Basta utililizar SET CONSTRAINTS [ALL|cons] DEFERRED
Exemplo:
create table tp01 ( cod integer, cod2 char(1) );
alter table tp01 add constraint unique (cod) constraint ucons;
insert into tp01 values (1,"a");
insert into tp01 values (2,"b");
insert into tp01 values (3,"c");
insert into tp01 values (4,"d");
set constraints all deferred;
begin work;
update tp01 set cod = 4 where cod2 = "b" ;
update tp01 set cod = 1 where cod2 = "d" ;
update tp01 set cod = 2 where cod2 = "a" ;
commit work;
# Codigo executado com sucesso!
# Se nao fosse definido o set..deferred iria acusar
# erro no 1o update.
Para maiores exemplos veja o artigo sobre UNIQUE INDEX e UNIQUE CONSTRAINTS
- 102 leituras




