In haben einen Oracle (10i) PL / SQL-Row-Level-Trigger, der für drei unabhängige Aufgaben verantwortlich ist. Da der Auslöser auf diese Weise relativ überladen ist, möchte ich diese drei Aufgaben in drei gespeicherte Prozeduren exportieren.
Ich dachte daran, einen my_table%ROWTYPE
-Parameter oder vielleicht einen Sammlungstyp für die Prozeduren zu verwenden, aber mein Hauptanliegen ist, wie man diese Parameter füllt.
Gibt es eine Möglichkeit, die ganze :NEW
-Zeile eines Triggers leicht in eine einzelne Variable zu setzen?
Bis jetzt war der einzige Weg, den ich herausfinden konnte, die Zuordnung jedes Feldes zu der Variablen, die nicht ganz zufriedenstellend ist, indem man die Codepflege betrachtet.
Etwas wie
%Vor%wäre bevorzugt. (Ich habe das nicht wirklich versucht, aber ich nehme an, es würde nicht funktionieren)
So ist es nicht möglich.
Vielleicht meine Antwort auf eine andere Frage kann helfen.
In den allermeisten Fällen besteht die einzige Möglichkeit, die neuen Werte in der Zeile einer% ROWTYPE-Variablen zuzuweisen, darin, jede Spalte explizit zuzuweisen. Etwas wie
%Vor%Wenn Ihre Tabelle basierend auf einem Objekt deklariert wird, gilt: NEW ist ein Objekt dieses Typs. Also wenn du einen Tisch wie
hast %Vor% Dann könnten Sie Prozeduren deklarieren, die Eingabeparameter vom Typ OBJ_FOO
akzeptieren und diese direkt von Ihrem Trigger aufrufen.
Der Vorschlag im anderen Thread zum Auswählen der Zeile aus der Tabelle in einem AFTER INSERT / UPDATE-Thread funktioniert leider nicht. Dies führt in der Regel zu einer mutierenden Tabellenausnahme.
%Vor%Dies ist ähnlich wie bei Justins Lösung, aber ein wenig kürzer (keine Eingabe des linken Teils jeder Zuweisung):
%Vor%Tags und Links triggers oracle plsql stored-procedures