做有關于oracle觸發器的實驗
1,創建表
SQL> create table scott.test
2 (id integer,
3 name varchar2(50));
表已創建。
SQL> create table scott.logtable
2 (log_data date,
3 action varchar2(50));
表已創建。
2,建觸發器
SQL> CREATE OR REPLACE TRIGGER scott.LogUpdateTrigger
2 AFTER INSERT OR UPDATE OR DELETE
3 ON scott.test
4 DECLARE log_action VARCHAR2(50);
5 BEGIN
6 IF INSERTING THEN log_action :='Insert';
7 ELSIF UPDATING THEN log_action :='Update';
8 ELSIF DELETING THEN log_action :='Delete';
9 ELSE DBMS_OUTPUT.PUT_LINE(' ..');
10 END IF;
11 INSERT INTO scott.logtable (log_data, action)
12 VALUES (SYSDATE, log_action);
13 END;
14 /
觸發器已創建
3.驗證觸發器
SQL> INSERT INTO scott.Test VALUES(1, 'Insert');
INSERT INTO scott.Test VALUES(1, 'Insert')
*
第 1 行出現錯誤:
ORA-04098: 觸發器 'SYS.LOGUPDATETRIGGER' 無效且未通過重新驗證
SQL> UPDATE scott.Test SET name='Update';
UPDATE scott.Test SET name='Update'
*
第 1 行出現錯誤:
ORA-04098: 觸發器 'SYS.LOGUPDATETRIGGER' 無效且未通過重新驗證
SQL> DELETE FROM scott.Test WHERE id=1;
DELETE FROM scott.Test WHERE id=1
*
第 1 行出現錯誤:
ORA-04098: 觸發器 'SYS.LOGUPDATETRIGGER' 無效且未通過重新驗證
【提示的觸發器與我建立的觸發器不一樣。剛學Oracle不久,很多知識不知道,所以就來求助了。建觸發器我在scott模式和sys模式下都弄過零,但是都是像3驗證觸發器那樣的提示,求大佬幫忙】
uj5u.com熱心網友回復:
這些陳述句,在語法是沒有問題的,把用戶的前輟去掉,在scott 這個模式下,重新跑一下試試。uj5u.com熱心網友回復:
連接到scott用戶下去坐操作,然后也沒必要加scott.uj5u.com熱心網友回復:
謝謝,各位的回復,我已經解決問題了。確實是因為在不同模式下的原因。如果是在scott模式下的話,將scott去掉即可。
如果是在scott模式下能夠將觸發器弄好的話,在sys模式下再執行此陳述句,那么也會成功。
至于原因是什么,我也不知道。同時問題是因為自己亂弄弄對的,所以解決方法可能有些不太對
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10026.html
標籤:基礎和管理
上一篇:更新有觸發器的表死鎖
