/ / Compication pri vytváraní primárneho kľúča ako logika v Oracle PLSQL Trigger - oracle, plsql, spúšťa

Komikácia pri vytváraní primárneho kľúča ako logika v Oracle PLSQL Trigger - oracle, plsql, spúšťa

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ď č. 1

Nie 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));