掌握Oracle触发器类型的技能(oracle触发器类型)
Oracle触发器(Triggers)可以帮助DBA监控用户行为并启动指定程序,这样可以自动执行一系列操作,帮助处理复杂的业务需求, 是Oracle数据库中很重要的知识点之一。触发器可以执行各种操作,比如更新表数据,通过电子邮件发送通知消息,执行程序,或执行PL/SQL块等等。
Oracle触发器分为三类:行触发器(Row Trigger)、表触发器(Table Trigger)和数据库触发器(Database Trigger)。
1. 行触发器:行触发器会在数据表上更新、插入或删除操作发生时被触发,每操作一行数据便触发一次,可以很容易构建出一种对特定行进行处理的操作规则。
例如,下面的表触发器会在数据表EMPLOYEES中的每一条记录发生更新时执行:
CREATE OR REPLACE TRIGGER t_sal_emp
AFTER UPDATE OF salary ON employees
FOR EACH ROW BEGIN
-- compute avg salary update statistic set avg_salary = (
select avg(salary) from employees
)END;
2. 表触发器:表触发器会在数据表上更新、插入或删除操作发生时被触发,但是它不是针对特定行进行处理,而是针对特定表进行处理。
例如,下面的表触发器会在用户更新数据表EMPLOYEES时执行:
CREATE OR REPLACE TRIGGER t_emp_table
AFTER UPDATE OR INSERT OR DELETE ON employees
FOR EACH statement BEGIN
-- log the event INSERT INTO log_table
(event, username, timestamp) VALUES ('table update', user, systimestamp);
END;
3. 数据库触发器:数据库触发器会在数据库级别的操作被触发,例如用户登录、数据库重启、用户脱机等等。
例如,下面的数据库触发器会在数据库重启时将数据库中所有表的更新日期和时间存入日志文件:
CREATE OR REPLACE TRIGGER t_db_all
AFTER SHUTDOWN ON DATABASE BEGIN
FOR i IN (SELECT table_name FROM user_tables) LOOP
-- save table info in a log file UTL_FILE.PUT_LINE (log_file, 'Last updated: '
|| to_char( SYSDATE, 'DD-MON-YYYY HH24:MIP'), 'table: ' || i.table_name);
END LOOP; END;
总之,具备Oracle触发器类型技能,可以帮助DBA解决很多复杂的业务需求,尤其是利用其可以进行的自动处理流程,更显得技能重要性。