Transakce v triggeru (oracle)

Jan Serak sherry na pikebo.cz
Úterý Červenec 17 13:37:17 CEST 2001


Vladimir Naprstek wrote:
> 
> Dobrý den,
> potřeboval bych obejít omezení na transakce v triggeru, je-li to možné. Konkrétně
> potřebuji při mazání záznamu v jedné tabulce pomazat další záznamy v jiných tabulkách.
> Část toho mohu řešit použitím REFERENCES....ON DELETE CASCADE, ale bohužel ne všude. A
> problémem je, že při mazání toho záznamu může dojít k porušení referencí (odkazy na mazaný
> záznam mohou existovat). V tom případě potřebuji vše vrátit do původního stavu...
> Řešit toto pomocí procedury se mi moc nechce...
> 
> Je jiná cesta než procedura?

Dost dobre nerozumim, o co Vam jde. O zadnem omezeni na transakce v
triggeru
nevim (snad jen ORA-4091).

V ramci DML prikazu nad nejakou tabulkou muze dojit k zazehu ;-)
triggeru,
ktery pak provadi dalsi DML prikazy a jimi provadene zmeny jsou
samozrejme
soucasti te same transakce. V pripade, ze dojde v ramci provadeni
triggeru
k nejake (jakekoli) chybe, bude pricinou selhani i puvodne volaneho
(korenoveho) prikazu. Jelikoz se veskery kod v triggerech povazuje
za soucast jej vyvolavajiciho DML prikazu, ktery ma byt atomicky, dojde
k automatickemu odvolani zmen provedenych triggerem pred vznikem chyby,
aniz by byla ukoncena transakce.

Ve Vami popisovane situaci lze triggery vrele doporucit. Zalezi pouze
na mire Vaseho vkusu, zda povazujete za lepsi kod natlacit do stored
procedures a ty vyvolavat triggerem, nebo kod tlacit primo do triggeru.

					Jan Serak


Další informace o konferenci Test