2010-04-14 49 views
1

我想要有一個'updateinfo'表來記錄每個更新/插入/刪除操作在另一個表上。如何使用SQL觸發器來記錄受影響的列的行號

在oracle中我寫的:

CREATE TABLE updateInfo時(rnumber NUMBER(10),表名VARCHAR2(100字節),動作VARCHAR2(100字節),UPDATE_DATE日期)

DROP TRIGGER TRI_TABLE ;
CREATE OR REPLACE TRIGGER TRI_TABLE
後刪除或插入或更新
ON演示
REFERENCING NEW半新不舊舊
FOR EACH ROW
BEGIN
如果然後插入
INSERT INTO updateInfo時(rnumber,表名,action,update_date)值(rownum,'demo','insert',sysdate);
elsif update then
insert into updateinfo(rnumber,tablename,action,update_date)values(rownum,'demo','update',sysdate);
elsif刪除然後
insert into updateinfo(rnumber,tablename,action,update_date)values(rownum,'demo','delete',sysdate);
end if;
- EXCEPTION
- WHEN OTHERS THEN
- 考慮記錄錯誤,然後重新加註
- RAISE;
END TRI_TABLE;

但是當檢查updateinfo時,所有的rnumber列都是零。 是否有檢索正確的行號?

+0

從這裏得出的結論是,在關係數據模型中,沒有「行號」這樣的概念 - 概念根本不適用。 – 2010-04-15 13:07:36

回答

1

ROWNUM不是你所想的那樣。 ROWNUM是一個只在語句執行的上下文中有意義的計數器(即第一個結果行總是有rownum = 1等)。我想你正在尋找ROWID,它標識了一行。

+0

如何在觸發器中使用ROWID? – Freeman 2010-04-14 07:27:51

+0

ROWID不標識一行。唯一標識符標識一行。 ROWID是一個指向某個行後物理位置的指針,例如expdp impdp。 – 2010-04-14 07:29:28

+0

Robert:是的,使用該表的主鍵可以使用ROWID – 2010-04-14 07:53:23

相關問題