oracle之觸發器

2021-08-14 07:21:28 字數 2596 閱讀 8276

1 oracle中觸發器是當進行操作時觸發事情,進行處理。例如進行對資料表進行插入、更新和刪除時進行觸發事情處理。

定義觸發器的是:create or replace trigger *** 

before|after   insert |update|delete 

on 資料庫表名

for each row --這是表示對每一行操作都會觸發事件

begin 

sql語句;

end;

如: create or replace trigger test4_t

after delete 

on demo 

for each row

begin

dbms_output.put_line(':old.name'||:old.name);

end;

2 oracle中用於輸出語句。通過dbms_output.put_line(***xx)

如:dbms_output.put_line(':old.name'||:old.name); 

盡量的要使用||。括號裡的需要時字元。而||是連線使用的。連線後就成字元了。

3 oracle中的觸發器可以寫if語句來進行判斷。

格式為:  

if 條件  then  

sql語句;

end if;

如:create or replace trigger test4_t

after insert or update or delete 

on demo 

for each row

begin

if inserting then

dbms_output.put_line('進行的是插入操作');

end if;

if updating then

dbms_output.put_line('進行的是更新操作');

end if;

if deleting then

dbms_output.put_line('進行的是刪除操作');

end if;

end;

4 在oracle中的觸發器中,可以判斷是否是insert還是update還是delete 

如:create or replace trigger test4_t

after insert or update or delete 

on demo 

for each row

begin

if inserting then

dbms_output.put_line('進行的是插入操作');

end if;

if updating then

dbms_output.put_line('進行的是更新操作');

end if;

if deleting then

dbms_output.put_line('進行的是刪除操作');

end if;

end;

5 在oracle中的觸發器中,可以使用『:new』和『:old』,:new表示是即將進行(插入或更新)操作的sql語句中的字段。

而:old表示進行(更新或刪除)操作時的sql語句中的字段

如: create or replace trigger test4_t

after delete 

on demo 

for each row

begin

dbms_output.put_line(':old.name'||:old.name);

end;

6 oracle中對字段進行賦值時,使用":="。

如: v_type:='insert';

7 oracle中的觸發器中不能對自己表進行插入更新刪除操作。但可以對別的表進行這些操作。

如:create or replace trigger test4_t

after insert or update or delete 

on demo

for each row 

declare v_type varchar2(10);

begin

if inserting then

v_type:='insert';

end if;

if updating then

v_type:='update';

end if;

if deleting then

v_type:='delete';

end if;

insert into log values(user,v_type,sysdate);

end;

但如果要對自己表進行插入更新刪除操作則會報錯。導致不能執行結束。

如:以下的觸發器會報錯,要多注意!!!!

如:create or replace trigger test4_t

after  delete 

on demo

for each row 

begin

insert into demo values(:old.nm,:old.name,:old.password);

end;

Oracle之觸發器

資料庫觸發器是乙個與表相關聯的 儲存的pl sql程式。每當乙個特定的資料操作語句 insert,update,delete 在指定表上發出時,oracle自定地執行觸發器中定義的語句序列。簡單的來說就當某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行,因此觸發器不需要人為的去呼叫,也不能...

Oracle觸發器之before delete

剛接觸oracle,新建了乙個before delete的觸發器,但老是報 警告 建立的觸發器帶有編譯錯誤 最後發現是觸發器裡面的語句沒有寫分號的原因。下面帖出來,也供新手參考 1.建立表 create table test1 cardid number,name nvarchar2 20 numb...

Oracle學習之觸發器

觸發器,顧名思義,必須由事件觸發 dml事件,ddl事件,資料庫事件 dml 資料操縱語句 insert,update,delete ddl 資料定義語句 create,alter,drop 資料庫事件 startup,shutdown,logon,logoff,servererror 語法 cte...