首页 文章

如何使用SQL触发器记录受影响列的行号

提问于
浏览
1

我想有一个'updateinfo'表,以便记录另一个表上的每个更新/插入/删除操作 .

在oracle我写了这个:

CREATE TABLE updateinfo(rnumber NUMBER(10),tablename VARCHAR2(100 BYTE),action VARCHAR2(100 BYTE),UPDATE_DATE date)

DROP TRIGGER TRI_TABLE;
创建或替换TRIGGER TRI_TABLE
删除或插入或更新后
在演示
将新旧作为旧的参考
对于每一行
开始
如果插入则
插入updateinfo(rnumber,tablename,action,update_date)值(rownum,'demo','insert',sysdate);
elsif然后更新
插入updateinfo(rnumber,tablename,action,update_date)值(rownum,'demo','update',sysdate);
elsif删除然后
插入updateinfo(rnumber,tablename,action,update_date)值(rownum,'demo','delete',sysdate);
万一;

  • 例外
  • 当其他的时候
  • 考虑记录错误然后重新加注
  • 升起;
    结束TRI_TABLE;

但是在检查updateinfo时,所有的rnumber列都为零 . 无论如何要检索正确的行号?

2 回答

  • 3

    唯一的选择是使用“演示”表的主键列 .

    ROWNUM不是你想要的,read the explanation .

    ROWID看起来像一个解决方案,但实际上它不是,因为它shouldn't be stored for a later use .

  • 1

    ROWNUM不是你想象的那样 . ROWNUM是一个计数器,它只在一次执行语句的上下文中有意义(即第一个结果行总是rownum = 1等) . 我想你正在寻找ROWID,它标识了一行 .

相关问题