Oracle PL / SQL: Weiterleitung einer ganzen Zeile an die Prozedur von einem Trigger aus

8

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)

    
Tim Meyer 21.06.2011, 09:58
quelle

4 Antworten

3

So ist es nicht möglich.

Vielleicht meine Antwort auf eine andere Frage kann helfen.

    
Peter Lang 21.06.2011, 10:08
quelle
8

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%     
Justin Cave 21.06.2011 14:06
quelle
2

Verwenden Sie SQL, um das SQL zu generieren;

%Vor%

Kopieren Sie dann die Ausgabe und fügen Sie sie ein.

    
Phanton 22.09.2011 14:45
quelle
0

Dies ist ähnlich wie bei Justins Lösung, aber ein wenig kürzer (keine Eingabe des linken Teils jeder Zuweisung):

%Vor%     
David Balažic 05.09.2011 14:41
quelle