Kann ich in einem Oracle-Trigger einer Zeilentypvariablen neue und alte zuweisen?

Ich wurde mit der Implementierung mehrerer Triggerskripte beauftragt und habe Beispiele von Mitarbeitern, mit denen ich arbeiten kann. In diesen verwenden sie pl-sql-Bedingungen zum Aktualisieren / Einfügen / Löschen sowie gigantische insert-Anweisungen (in einer anderen Tabelle). Diese Einfügeanweisungen unterscheiden sich nur darin, ob den Werten ein neues oder ein altes Präfix vorangestellt wird. Ich dachte, ich wäre schlau und würde versuchen, meine etwas kompakter zu machen, indem ich Folgendes verwende:

DECLARE
  vRow SATURN.SPRCMNT%ROWTYPE;

BEGIN

  IF UPDATING THEN
    vRow := :NEW;
  ELSIF INSERTING THEN
    vRow := :NEW;
  ELSIF DELETING THEN
    vRow := :OLD;
  END IF;

  -- Not the real insert statement
  INSERT INTO blah 
    (columns)
    VALUES
    (vRow.somecolumns);

END;

Ich bekomme folgendes vom Kompilierungssystem zurück:

10/13  PLS-00049: bad bind variable 'NEW'
13/13  PLS-00049: bad bind variable 'NEW'
16/13  PLS-00049: bad bind variable 'OLD'

Offensichtlich gefällt das nicht. Gibt es etwas, das das erreicht, was ich versuche? Sind: new und: old keine echten Zeilentypen? Es scheint dumm zu sein, den im Wesentlichen gleichen Code dreimal zu wiederholen, und dennoch kann ich keinen besseren Weg finden. Zum Teufel, ich glaube, ich habe gelesen, dass es auch für die Größe der Trigger eine harte Grenze gibt. Jede Hilfe dankbar.

[Bearbeiten] Nur ein Gedanke, ist es möglich, die UPDATING / INSERTING-Schlüsselwörter in einem DECODE () zu referenzieren?

Wenn ich zum Beispiel einen DECODE (ETWAS VAR, UPDATING,: NEW.column, DELETING,: OLD.column) ausführen könnte, könnte ich den Wert jeder Spalte in vRow mit einer einzigen Anweisung festlegen.

Ich denke, es wäre besser, zuerst DELETING zu aktivieren und die Standardeinstellung für die anderen beiden zu verwenden.

Ist das möglich?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage