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

时间:2010-04-14 06:43:56

标签: oracle triggers

我希望有一个'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
删除或插入或更新后 在演示中 将新旧作为旧的参考文献 对于每一行
BEGIN
如果插入则 插入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 个答案:

答案 0 :(得分:3)

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

ROWNUM不是您要找的,read the explanation

ROWID看起来像一个解决方案,但实际上并非如此,因为shouldn't be stored for a later use

答案 1 :(得分:1)

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