Podľa požiadavky, ktorou čelímejedinečná situácia. Radi by sme vytvorili niečo na virtuálnom primárnom kľúči na stole iba pre konkrétne ID odosielateľa. Poznámka: ID odosielateľa je jeden zo stĺpcov v tabuľke.
Na dosiahnutie tohto cieľa sme sa rozhodli použiť spúšťačeavšak pri vkladaní to funguje dobre, ale pri kontrole aktualizácie dáva nasledujúcu chybu: [ORA-04091: tabuľka XYZ zmutuje, spúšť / funkcia ju nemusí vidieť]
Príklad príkladu na pochopenie pracovného postupu:
Štruktúra tabuľky (Sequence, Zadávateľ_id, Krajina, Popis)
Unikátny primárny kľúč: sekvencia
Ak Submitter_id = "SYSTEM" potom potrebujeme niečo z virtuálneho primárneho kľúča aj na krajine.
Aktuálny kód pre aktiváciu BEFORE INSERT OR UPDATE na tabuľke XYZ, ktorá poskytuje chybu počas aktualizácie:
If (:NEW.Submitter_Id = "SYSTEM") Then
BEGIN
SELECT count(1) INTO counterVariable
FROM XYZ
WHERE Country = :NEW.Country
And Submitter_Id = "SYSTEM";
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20005, "Sample Error");
END;
If (counterVariable != 0)
Then
raise_application_error(-20005, "Primary Key Violation error");
End If;
End If;
Vopred ďakujem.
odpovede:
1 pre odpoveď č. 1Nie je potrebné robiť to so spúšťačom. Len by som vytvoril funkčný unikátny index.
create unique index xyz_unq on xyz(decode(submitter_id, "SYSTEM", country));