我希望有一个'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列都为零。 无论如何要检索正确的行号?
答案 0 :(得分:3)
唯一的选择是使用“演示”表的主键列。
ROWNUM不是您要找的,read the explanation。
ROWID看起来像一个解决方案,但实际上并非如此,因为shouldn't be stored for a later use。
答案 1 :(得分:1)
ROWNUM不是你想象的那样。 ROWNUM是一个计数器,它只在一次执行语句的上下文中有意义(即第一个结果行总是rownum = 1等)。我想你正在寻找ROWID,它标识了一行。