我想阻止任何具有VERSIONID=1
的行在某個表中被刪除。我也想將它記錄在審計表中,以便我們可以看到這是爲了記錄目的而發生的。我試圖用一個觸發器來做到這一點:防止在Oracle中刪除某些行
CREATE TRIGGER TPMDBO.PreventVersionDelete
BEFORE DELETE ON TPM_PROJECTVERSION
FOR EACH ROW
DECLARE
BEGIN
IF(:old.VERSIONID = 1)
THEN
INSERT INTO TPM_AUDIT VALUES ('Query has attempted to delete root project version!', sysdate);
RAISE_APPLICATION_ERROR(-20001, 'Query has attempted to delete root project version!');
END IF;
END;
我得到如下結果:
SQL> delete from TPM_PROJECTVERSION where PROJECTID=70 and VERSIONID=1;
delete from TPM_PROJECTVERSION where PROJECTID=70 and VERSIONID=1
*
ERROR at line 1:
ORA-20001: Query has attempted to delete root project version!
ORA-06512: at "TPMDBO.PREVENTVERSIONDELETE", line 6
ORA-04088: error during execution of trigger 'TPMDBO.PREVENTVERSIONDELETE'
但是,表TPM_AUDIT
是空的。難道我做錯了什麼?
謝謝!我將研究這種方法,但我現在認爲審計可能是一個更好的功能,因爲它也會包含SQL文本(我無法從觸發器中獲取)。基本上,我試圖弄清楚爲什麼這些行每個月都會被隨機刪除幾次,即使代碼庫中沒有任何東西從該表中刪除任何內容。 – 2012-01-03 20:25:18