[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