PLSQL學習-【8trigger】
觸發器在資料庫裡以獨立的物件儲存,它與儲存過程不同的是,儲存過程透過其他程式來啟動執行或者直接啟動執行,而觸發器是由一個時間來啟動執行。並且,觸發器不能接受引數。所以執行觸發器就叫觸發或者點火。
ORACLE事件指的是對資料庫的表進行的insert、update、delete操作或者對檢視進行類似的操作。
ORACLE將觸發器的功能擴充套件到了觸發ORACLE,如資料庫的啟動與關閉等。
語句級觸發器:
是指當某觸發事件發生時,該觸發器只執行一次;
行級觸發器:
是指當某觸發事件發生時,對受到該操作影響的每一行資料,觸發器都單獨執行一次。
old 代表舊資料,new代表修改或插入的新資料。
所以insert只有new delete只有old
在刪除動作之前備份。
03:27:31 SQL> create table emp_bak as select * from emp where 1 = 2; Table created. Elapsed: 00:00:00.06 03:29:13 SQL> 03:29:13 SQL> select * from emp_bak; no rows selected
create or replace trigger br_bak
before delete or update on emp for each row
declare
begin
insert into emp_bak
values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,old.sal,old.comm,old.deptno);
commit;
end;
create or replace trigger br_bak
before delete or update on emp for each row --針對行的觸發
declare
begin
insert into emp_bak
values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
end;
03:29:27 SQL> delete from emp where empno = 9999;
1 row deleted.
Elapsed: 00:00:00.04
03:31:33 SQL> commit;
Commit complete.
Elapsed: 00:00:00.00
03:31:36 SQL> select * from emp_bak;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
9999 LOU
Elapsed: 00:00:00.07
這樣就可以了。
替換觸發器:
create or replace trigger tr_delete
instead of delete on emp_back for each row
declare
begin
delete from emp where empno=:old.empno;
end;
記錄使用者的操作行為:
語句觸發:
create or replace trigger tr_action after insert or delete or update on emp declare v_action varchar2(30); begin if inserting then v_action:='insert'; elsif deleting then v_action:='delete'; elsif updating then v_action:='update'; else v_action:='others'; end if; insert into t_action values(v_action ,sysdate); end;
當對emp中記錄進行操作的時候,我們就會在這個表中有記錄。
04:32:48 SQL> select * from t_action; ACTION_NAME ACTION_TIME ------------------------------ ------------ delete 24-NOV-14 Elapsed: 00:00:00.00
系統觸發器
:記錄哪些使用者偷偷的登陸你的資料庫了
04:46:32 SQL> r
1 create or replace trigger tr_login
2 after logon on database
3 declare
4 begin
5 insert into scott.login_tab values(USER,sysdate);
6*end;
Trigger created.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-1344852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- plsql陣列學習SQL陣列
- PLSQL學習-【9包】SQL
- PLSQL學習——控制語句SQL
- PLSQL學習-【5遊標】SQL
- PLSQL學習-【6異常】SQL
- PLSQL學習——資料型別SQL資料型別
- PLSQL學習-【3迴圈結構】SQL
- 學習《PLSQL開發指南》筆記——PLSQL的基本原理SQL筆記
- PLSQL學習-【4複合資料型別】SQL資料型別
- PLSQL學習-【7儲存過程、函式】SQL儲存過程函式
- PLSQL學習-【2簡單的增刪改查】SQL
- plsql_case when_end case學習小例SQL
- 學習《PLSQL開發指南》筆記—— SQLPLUS建立過程前的學習SQL筆記
- 學習《PLSQL開發指南》筆記——條件和序列控制SQL筆記
- 【開發篇plsql】plsql遊標SQL
- 【開發篇plsql】plsql物件型別SQL物件型別
- oracle plsql(二)_plsql塊內之**冪OracleSQL
- oracle plsqlOracleSQL
- PLSQL questionsSQL
- plsql tnsnamesSQL
- begin plsqlSQL
- 【開發篇plsql】plsql事務處理SQL
- 學習學習再學習
- plsql配置使用SQL
- plsql use skillsSQL
- PLSQL Developer 14SQLDeveloper
- oracle plsql例子OracleSQL
- plsql逐行累加SQL
- PLSQL_PROFILESQL
- plsql建立jobSQL
- 【開發篇plsql】plsql資料型別(二) recordSQL資料型別
- 深度學習——學習目錄——學習中……深度學習
- 業務中出現plsql打頭的表_plsql_profilter_runsSQLFilter
- 深度學習(一)深度學習學習資料深度學習
- 深度學習學習框架深度學習框架
- PLSQL Developer 行號SQLDeveloper
- PLSQL程式語言SQL
- PLSQL Developer配置使用SQLDeveloper