我希望能够获取序列值并在触发器中的多个操作上使用相同的值来对表进行审计操作。因此,在更新表时,我想获取所有已更新的列。但是,当我在数据库中注册更改的列时,我想将它们分组为一个。有没有一种方法来获取序列号并将其存储在触发器内的变量中。我能够制作的代码一直在获取PLS-00357。

CREATE OR REPLACE TRIGGER TRG_EMPLOYEE_CHANGED AFTER INSERT OR DELETE
 OR UPDATE ON EMPLOYEE  REFERENCING OLD AS old NEW AS new  FOR EACH ROW
DECLARE
    GROUPID NUMBER := SEQ_POPERATIONLOG_LOGSUBNO.NEXTVAL;
BEGIN

   OPERATION('FIRST_NAME', GROUPID, :old.FIRST_NAME, :new.FIRST_NAME);
 OPERATION('LAST_NAME', GROUPID, :old.LAST_NAME, :new.LAST_NAME);
 OPERATION('ADDRESS', GROUPID, :old.ADDRESS, :new.ADDRESS);
 OPERATION('TELEPHONE', GROUPID, :old.TELEPHONE, :new.TELEPHONE);
END;

最佳答案

在11g之前,从序列中获取值的唯一受支持语法为:

DECLARE
    GROUPID NUMBER ;
BEGIN
   SELECT  SEQ_POPERATIONLOG_LOGSUBNO.NEXTVAL
   INTO GROUPID
   FROM DUAL;
   ...

一种替代解决方案是在第一个INSERT语句中使用NEXTVAL,对其他使用CURRVAL(即,该 session 中最近分配的值)。

关于oracle - 是否允许在触发器内检索序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7555270/

10-13 00:58