Могу ли я назначить новое и старое в переменной типа строки в триггере Oracle?

Мне было поручено реализовать несколько триггерных сценариев, и у меня есть примеры от коллег, с которыми можно работать. В них они используют условные выражения pl-sql для обновления / вставки / удаления, а также гигантские операторы вставки (в другой таблице). Эти операторы вставки не отличаются кроме того, что значения имеют префикс с новым или старым. Я подумал, что буду умнее и постараюсь сделать мой немного более компактным, используя следующее:

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;

Я получаю следующее от системы компиляции:

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

Очевидно, что это не так. Есть ли что-то, что достигнет того, что я пытаюсь? Являются ли: new и: old просто не настоящими типами строк? Кажется глупым повторять то, что по сути один и тот же код, три раза, и все же я не могу придумать лучшего способа. Черт, я думаю, что я читал, что есть жесткое ограничение на размер триггеров. Любая помощь приветствуется.

[Edit] Просто мысль, возможно ли ссылаться на ключевые слова UPDATING / INSERTING как-то внутри DECODE ()?

Например, если бы я мог выполнить DECODE (SOMETHINGVAR, UPDATING,: NEW.column, DELETING,: OLD.column), то я мог бы установить значение каждого столбца в vRow с помощью одного оператора.

Я думаю, что было бы лучше сначала проверить УДАЛЕНИЕ, и использовать по умолчанию для двух других.

Это возможно?

Ответы на вопрос(2)

Ваш ответ на вопрос