我想有一个'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 回答
唯一的选择是使用“演示”表的主键列 .
ROWNUM不是你想要的,read the explanation .
ROWID看起来像一个解决方案,但实际上它不是,因为它shouldn't be stored for a later use .
ROWNUM不是你想象的那样 . ROWNUM是一个计数器,它只在一次执行语句的上下文中有意义(即第一个结果行总是rownum = 1等) . 我想你正在寻找ROWID,它标识了一行 .