Em um disparador do Oracle, posso atribuir novo e antigo a uma variável rowtype?

Eu fui encarregado de implementar vários scripts de gatilho, e eu tenho exemplos de colegas de trabalho para trabalhar. Nesses, eles usam condicionais pl-sql para atualização / inserção / exclusão, juntamente com instruções de inserção gigantescas (em outra tabela). Essas instruções de inserção não variam, exceto se os valores são prefixados com novo ou antigo. Eu pensei que seria esperto e tentaria tornar o meu um pouco mais compacto, usando o seguinte:

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;

Eu recebo o seguinte de volta do sistema de compilação:

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, não gosta disso. Existe algo que vai conseguir o que estou tentando? São: new e: old apenas não true rowtypes? Parece estúpido repetir o que é essencialmente o mesmo código 3 vezes, e ainda não consigo descobrir uma maneira melhor. Inferno, eu acho que li que há um limite rígido no tamanho dos gatilhos também. Qualquer ajuda apreciada.

[Edit] Apenas um pensamento, é possível referenciar as palavras-chave UPDATING / INSERTING de alguma forma dentro de um DECODE ()?

Por exemplo, se eu pudesse fazer um DECODE (SOMETHINGVAR, UPDATING,: NEW.column, DELETING,: OLD.column), então eu poderia definir o valor de cada coluna no vRow com uma única instrução.

Eu acho que seria melhor verificar o DELETING primeiro e usar o padrão para os outros dois.

Isso é possível?

questionAnswers(2)

yourAnswerToTheQuestion