ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 触发器

触发器

原创 Linux操作系统 作者:红叶DBA 时间:2011-04-12 16:45:20 0 删除 编辑

-- 触发器;

--语句级触发器,语句执行的次数与触发器执行的次数一样:
--1.建表,测试触发器;
create table emp_log (op_name varchar(20) , op_time date , op_do varchar2(10));
--2.建立触发器:
create or replace trigger emp_op before insert or update or delete on emp
declare v_operation varchar(10);
begin
if inserting then
v_operation:='INSERT';
elsif updating then
v_operation:='UPDATE';
else
v_operation:='DELETE';
end if;
insert into emp_log values(user,sysdate,v_operation);
end;

--行级触发器,语句影响的行数与触发器执行的次数一样;
--1.建表,测试触发器:
create table test (tno number , tname varchar2(20));
--2.建序列,测试:
create sequence test_seq start with 1 increment by 1;
--3.建触发器:
create or replace trigger testhang before insert or update of tno on test for each row
begin
if inserting then
select test_seq.nextval into :new.tno from dual;
else
raise_application_error(-20020,'不允许!');
end if ;
end;

--instead of 触发器;通常用于视图中;
--1.建立一个emp 表的视图;
create view emp_dept_view as
select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno;
--2.建立instead of 触发器;
create or replace trigger test_instead instead of insert on emp_dept_view for each row
declare v_deptno emp.deptno%type;
begin
insert into emp (empno,ename,sal) values (:new.empno, :new.ename, :new.sal);
select deptno into v_deptno from dept where dname=:new.dname;
update emp set deptno=v_deptno where empno=:new.empno;
exception
when no_data_found
then dbms_output.put_line('有数据无法找到!');
end emp_dept_view;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-692336/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 分页存储过程
请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    69607