Czy w wyzwalaczu Oracle mogę przypisać nową i starą zmienną rowtype?

Mam zadanie zaimplementowania kilku skryptów wyzwalających, a mam przykłady od współpracowników do pracy. W tych przypadkach używają warunków warunkowych pl-sql do aktualizacji / wstawiania / usuwania, a także gigantycznych instrukcji wstawiania (w innej tabeli). Te instrukcje wstawiania nie różnią się od siebie, niezależnie od tego, czy wartości są poprzedzone nowymi czy starymi. Myślałem, że będę sprytny i spróbuję uczynić mój trochę bardziej zwartym, używając następujących:

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;

Otrzymuję następujące informacje z systemu kompilacji:

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

Oczywiście to się nie podoba. Czy jest coś, co osiągnie to, co próbuję? Czy: nowe i: stare tylko nie prawdziwe wiersze? Wydaje się głupie powtarzanie tego, co jest zasadniczo tym samym kodem 3 razy, a jednak nie mogę znaleźć lepszego sposobu. Do diabła, myślę, że przeczytałem, że istnieje także pewien trudny limit wielkości wyzwalaczy. Każda pomoc doceniana.

[Edytuj] Tylko myśl, czy można w jakiś sposób odwołać się do słów kluczowych UPDATING / INSERTING w DECODE ()?

Na przykład, jeśli mógłbym zrobić DECODE (SOMETHINGVAR, UPDATING,: NEW.column, DELETING,: OLD.column), to mógłbym ustawić wartość każdej kolumny w vRow za pomocą pojedynczej instrukcji.

Wydaje mi się, że lepiej byłoby najpierw usunąć USUŃ i użyć domyślnych dla pozostałych dwóch.

czy to możliwe?

questionAnswers(2)

yourAnswerToTheQuestion