上海网站建设shzanen,网站推广优化的方法,动易网站管理系统教程,设计师的个人网站简述本文將具体简述触发器的语法#xff0c;触发条件及其适用场景#xff0c;希望对读者理解#xff0c;使用触发器能起到作用。触发器的定位触发器是数据库独立编译#xff0c;存储的对象#xff0c;是数据库重要的技术。和函数不同#xff0c;触发器的执行是主动的触发条件及其适用场景希望对读者理解使用触发器能起到作用。触发器的定位 触发器是数据库独立编译存储的对象是数据库重要的技术。和函数不同触发器的执行是主动的它监控着数据库满足其触发条件自动触发便于我们对数据库的管理。触发器能监控什么触发器能 监控数据库的数据数据结构的变化及数据库事件。可以监控数据库以下变化数据库操作(DML)语句(DELETEINSERT或UPDATE)数据库定义(DDL)语句(CREATEALTER或DROP)。数据库操作(SERVERERRORLOGONLOGOFFSTARTUP或SHUTDOWN)。触发器语法CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;触发器触发的时机 触发器的触发条件在事件发生前或发生后主要用于DML语句下触发的一共有12种类型BEFORE INSERTBEFORE INSERT FOR EACH ROWAFTER INSERTAFTER INSERT FOR EACH ROWBEFORE UPDATEBEFORE UPDATE FOR EACH ROWAFTER UPDATEAFTER UPDATE FOR EACH ROWBEFORE DELETEBEFORE DELETE FOR EACH ROWAFTER DELETEAFTER DELETE FOR EACH ROW触发器类型 DML触发器 ORACLE可以在DML(数据更新语句进行触发可以在DML操作前或操作后进行触发并且可以对每个行或语句操作上进行触发。insert into user_lin(username) values(linzilong)create or replace trigger myTriggerInsert
before insert on user_lin
for each row
begin
insert into mytrigger values(linzilong2,sysdate);
end;替代触发器 由于在ORACLE里不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。--練習替代觸發器
CREATE TABLE dept_lin(
deptno INT PRIMARY KEY,-- 部門編號
dname VARCHAR(14),-- 部門名稱
loc VARCHAR(13)-- 部門地點
);CREATE TABLE emp_lin(
empno INT NOT NULL PRIMARY KEY,-- 員工號
ename VARCHAR(10),-- 員工姓名
job VARCHAR(10),-- 職位
mgr INT, --上級領導
hiredate date,-- 受雇日期
sal number,-- 薪金
comm number, -- 佣金
deptno number -- 所屬部門);
INSERT INTO dept VALUES
(10, ‘Accounting’, ‘New York’),
(20, ‘Research’, ‘Dallas’),
(30, ‘Sales’, ‘Chicago’),
(40, ‘Operations’, ‘Boston’),
(50, ‘Admin’, ‘Washing’);
INSERT INTO emp VALUES
(7369, ‘Smith’, ‘Clerk’,7902, ‘1980-12-17’,800,0,20),
(7499, ‘Allen’, ‘Salesman’,7698,‘1981-2-20’,1600,300,30),
(7844, ‘Turner’, ‘Salesman’,7499, ‘1981-9-8’,1500,0,30),
(7698, ‘Tom’, ‘Manager’,0, ‘1981-9-8’,6100,600,40),
(7876, ‘Adams’, ‘Clerk’,7900, ‘1987-5-23’,1100,0,20),
(7900, ‘James’, ‘Clerk’,7698, ‘1981-12-3’,2400,0,30),
(7902, ‘Ford’, ‘Analyst’,7698, ‘1981-12-3’,3000,NULL,20),
(7901, ‘Kik’, ‘Clerk’,7900, ‘1981-12-3’,1900,0,30);create or replace view myview as
SELECT emp_lin.*
FROM emp_lin left JOIN dept_lin
ON dept_lin.deptnoemp_lin.deptno;create or replace trigger emp_triggersINSTEAD OF delete ON myview for each row
begin delete from emp_lin where empno :old.empno;end emp_triggers ;select *from myview
delete from myview where empno7369系统触发器 ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发如ORACLE系统的启动与关闭等。触发器的限制1.不能使用控制语句如commit、rollback、savepoint2.由触发器所调用过程或函数也不能使用控制语句3.不能使用long、long raw类型oracle触发器的优缺点优势自动化。自动化维护数据保证数据的一致性维护数据的合法性。数据插入前自动检查数据的合法性保证数据的安全。缺点 可维护性差。由于触发器的隐蔽性数据更新失败难以追溯逻辑的修改需要修改源码由于触发器的源码可读性较差导致这一过程变得更加麻烦。