[Re:]Poradi triggeru u ORACLE / LONG - ORACLE ONLY

Jan Serak sherry na pikebo.cz
Středa Únor 14 11:48:41 CET 2001


ludek.rasek na centrum.cz wrote:
> 
> Vyzjistil jsem od kolegy presny popis problemu ve verzi 8.1.6
> (Alpha-Tru64). - aplikace tvorena pomci ProC (embeded SQL)
> 
> --CITE BEGIN --
> 1.)  After insert trigger of row se vykonává před kontrolou cizích
> klíčů. Pokud ovšem provádíte insert pole, tak se toto projeví
> pouze u 1 položky.
> 
> Následky: Pokud počítáte s kontrolou na úrovni cizích klíčů a
> nemáte ošetřeno na úrovni triggeru, tak insert do tabulky končí
> chybou: "No data found"
> 
> Ošetření: Kontrolu provádět i na úrovni triggeru a nespoléhat na
> cizí klíč
> 
> 2.) Při insert pole do tabulky se při zpracování 2. a další
> položky již kontrolují cizí klíče před AFTER ROW INSERT TRIGGERem,
> avšak při chybě se správně nenaplní struktura SQLCA.SQLCODE a není
> možno zjistit, ve které položce k chybě došlo.
> 
> Následky: Při zpracování davkoveho insertu jako chybu vždy ORACLE
> vrací chybu na 1. položky i přesto, že vznikla např. v desáté.
> 
> 3.) Pokud nad tabulkou není AFTER ROW INSERT TRIGGER a insertuje
> se pole, tak kontrola na cizí klíče probíhá pouze na 1. položce!!!!
> --CITE END--
> 
> Problematicke tedy je davkove vkladani do tabulky (hodnoty v
> poli), bez ktereho vsak neni mozne efektivne implementovat
> rozsahlejsi plneni tabulek.
> 
> Chybu c. 1 jiz oracle oznacil za chybu urcite, ostatni zrejme
> take, ale to nevim jiste.

Tak to je teda prasarna. Zkousel jsem to na 8iR2 i 8iR3 a na obou
nejprve spusti after insert for each row a potom teprve kontroluje
referencni constraint. Na 7.3.4 nejprve zkontroluje existenci
rodicovskeho zaznamu a teprve potom spusti after insert trigger.

To je opravdu dost zavazna chyba!

						Jan Serak


Další informace o konferenci Test