En un activador de Oracle, ¿puedo asignar nuevos y antiguos a una variable de tipo fila?

Se me ha asignado la tarea de implementar varios scripts de activación, y tengo ejemplos de compañeros de trabajo para trabajar. En esos, usan condicionales de pl-sql para actualizar / insertar / eliminar, junto con instrucciones de inserción gigantescas (en otra tabla). Estas declaraciones de inserción no varían más que si los valores tienen el prefijo nuevo o antiguo. Pensé que sería inteligente y trataría de hacer el mío un poco más compacto, usando lo siguiente:

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;

Recibo lo siguiente del sistema de compilación:

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

Obviamente no le gusta esto. ¿Hay algo que logrará lo que estoy intentando? Son: new y: old simplemente no son verdaderos tipos de fila? Parece tonto repetir lo que es esencialmente el mismo código 3 veces, y sin embargo no puedo encontrar una mejor manera. Demonios, creo que leí que también hay un límite duro en el tamaño de los disparadores. Cualquier ayuda apreciada.

[Editar] Solo un pensamiento, ¿es posible hacer referencia a las palabras clave ACTUALIZAR / INSERTAR de alguna manera dentro de un DECODE ()?

Por ejemplo, si pudiera hacer un DECODE (SOMETHINGVAR, UPDATING,: NEW.column, DELETING,: OLD.column), podría establecer el valor de cada columna en vRow con una sola declaración.

Supongo que sería mejor marcar BORRAR primero y usar el valor predeterminado para los otros dos.

es posible?

Respuestas a la pregunta(2)

Su respuesta a la pregunta