PL/SQL程序之触发器

原创 2012年03月22日 09:45:30
触发器
1、数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
2、触发器的类型
1)、语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
2)、行级触发器(FOR EACH ROW)
触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。
创建触发器:
   CREATE  [or REPLACE] TRIGGER  触发器名
   {BEFORE | AFTER}
   {DELETE | INSERT | UPDATE [OF 列名]}
   ON  表名
   [FOR EACH ROW [WHEN(条件) ] ]
   PLSQL 块

实例一:限制非工作时间向数据库中插入数据
构建触发器:
create or replace trigger insertEmp
  before insert on emp  
  for each row
declare
  -- local variables here
begin
  if to_char(sysdate,'day') in ('星期六') or to_number(to_char(sysdate,'hh24')) between 8 and 24
    then 
      raise_application_error(-20001,'星期六或者8-24不能插入数据');
      end if;
end insertEmp;
写sql语句触发
SQL> insert into emp(empno,deptno) values (1245,10);
结果:
insert into emp(empno,deptno) values (1245,10)
ORA-20001: 星期六或者8-24不能插入数据
ORA-06512: 在 "SCOTT.INSERTEMP", line 6
ORA-04088: 触发器 'SCOTT.INSERTEMP' 执行过程中出错

触发语句与伪记录变量的值
触发语句     :old                        :new
Insert		所有字段都是空话(null)		将要插入的数据
Update      更新以前该行的值            更新后的值
Delete       删除以前改行的值            所有字段都是空(null)

实例二:确认数据(检查emp表中sal的修改值不低于原值)
构建触发器
create or replace trigger updateEmp
  before update on emp  
  for each row
declare
  -- local variables here
begin
  if :new.sal<:old.sal then
    raise_application_error(-20002,'更改的数据不能小于原有的值');
    end if;
end updateEmp;
书写sql语句触发
SQL> update emp set sal=100 where empno=7369;
结果:
update emp set sal=100 where empno=7369
ORA-20002: 更改的数据不能小于原原有的值
ORA-06512: 在 "SCOTT.UPDATEEMP", line 5
ORA-04088: 触发器 'SCOTT.UPDATEEMP' 执行过程中出错

练习:限制每个部门只招聘5名职工,超过计划则报出错误报告
构建触发器
create or replace trigger insertEmp
  before insert on emp  
  for each row
declare
  -- local variables here
  cursor c1 is select count(*) from emp group by deptno;
  count1 number;
begin
  open c1;
  fetch c1 into count1;
   if 
     count1>=5
   then
     raise_application_error(-20003,'本部门不能再插入了');
   end if;
   
   --  dbms_output.put_line(count1);
    close c1;
end insertEmp;
书写sql语句触发:
SQL> insert into emp (empno,deptno) values(2435,30);
结果:
insert into emp (empno,deptno) values(2435,30)
ORA-20003: 本部门不能再插入了
ORA-06512: 在 "SCOTT.INSERTEMP", line 11
ORA-04088: 触发器 'SCOTT.INSERTEMP' 执行过程中出错

触发器总结:
1、	触发器可用于
a)	数据确认  
b)	实施复杂的安全性检查
c)   做审计,跟踪表上所做的数据操作等
2、	查询触发器、过程及函数
a)	Select * from user_triggers;
b)	Select * from user_source;

oracle中pl/sql编程---存储过程,函数,触发器,包

1.pl/sql编程 pl/sql 指procedure language 过程化/sql. pl/sql 是oracle在标准的sql语句基础上扩展的一种对oracle数据库进行编程的的语言。 ...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年06月13日 22:28
  • 1628

通过PL/SQL创建序列和触发器实现表自增字段

创建序列 创建触发器
  • mypowerhere
  • mypowerhere
  • 2017年06月28日 15:13
  • 1951

用PL/SQL Developer创建Oracle触发器以及触发器的一点点知识与出现的问题

本文将介绍如何使用PL/SQL Developer快速的创建一个触发器,应该明确的是鼠标的所有操作都是可以用代码实现的...
  • asdsa108
  • asdsa108
  • 2016年01月19日 09:10
  • 2539

Oracle9i PL/SQL程序设计,存储过程、包、数据库触发器设计,PPT

  • 2009年07月17日 17:47
  • 137KB
  • 下载

PL/SQL程序设计之触发器(五)

一.触发器 1.触发器概念: 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执...
  • u012661010
  • u012661010
  • 2017年03月26日 16:12
  • 480

PL/SQL程序设计 第八章 触发器

触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 §8.1  触发器类型     触发器在数据库里以独...
  • rockpk008
  • rockpk008
  • 2014年03月25日 00:41
  • 390

oracle pl/sql 存储过程和函数与触发器

  • 2017年04月20日 10:14
  • 961KB
  • 下载

ORACLE PL/SQL编程之八: 把触发器说透

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触...
  • kongji103
  • kongji103
  • 2015年12月03日 13:15
  • 150

ORACLE PL/SQL编程之八:把触发器说透

大家一定要评论呀,感谢!光发表就花了我将近一个下午。 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建...
  • thy822
  • thy822
  • 2012年03月29日 10:59
  • 613

ORACLE PL/SQL编程之八: 把触发器说透

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 ...
  • icanlove
  • icanlove
  • 2014年12月04日 19:38
  • 525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL程序之触发器
举报原因:
原因补充:

(最多只允许输入30个字)