PL/SQL中触发器的简单使用

原创 2012年03月22日 12:58:09
触发器的简单使用 
1.触发器介绍
数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

2.触发器的类型
(1)	语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
(2)	行级触发器(FOR EACH ROW)
触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。

3.触发器的举例
(1)限制非工作时间向数据库中插入数据
create or replace trigger insertEmp
before insert on emp
declare
begin
       if(to_char(sysdate,'day') in ('星期四','星期五')) then
              raise_application_error(-20001,'不能插入数据');
       end if;
end;

测试:
SQL> insert into emp(empno,deptno) values(14,10);
 
insert into emp(empno,deptno) values(14,10)
ORA-20001: 不能插入数据
ORA-06512: 在 "TEST1.INSERTEMP", line 5
ORA-04088: 触发器 'TEST1.INSERTEMP' 执行过程中出错


(2)更改的数据不能小于原原有的值
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> update emp set sal=200 where empno=7369;
 
update emp set sal=200 where empno=7369
 
ORA-20002: 更改的数据不能小于原原有的值
ORA-06512: 在 "TEST1.UPDATEEMP", line 5
ORA-04088: 触发器 'TEST1.UPDATEEMP' 执行过程中出错



(3) 指定部门插入的员工数不能大于5
create or replace trigger limite
  before insert on emp  
  for each row
declare
  -- local variables here
  cursor cl is select count(*) from emp group by deptno;
 emp_count emp.empno%type;
begin
  open cl;
  fetch cl into emp_count;
  if (emp_count>5) then
          raise_application_error(-20002,'员工个数不能多余5个');
  end if;
  close cl;
end limite;

或
create or replace trigger limite
before insert on emp  
for each row
declare
num number;
begin
select count(*) into num from emp where deptno=:new.deptno;
 if(num>=5) then
        raise_application_error(-20002,'员工个数不能多余5个');
 end if;
end limite;

结果和以上的格式一样

相关文章推荐

使用PL/SQl developer 增加自增字段和触发器

1增加表 2增加索引 3增加触发器

Oracle(25)pl/sql编程 触发器及管理触发器及case...end case使用

①触发器 是指存放在数据库中,被隐含执行的存储过程,可以支持dml,还支持基于系统事件和ddl操作建立触发器。...

PL/SQL触发器3(使用DML触发器)

为了确保数据库数据满足特定的商业规则或企业逻辑,可以使用约束、触发器和子程序实现。因为约束性能最好,实现最简单,所以首先约束;如果使用约束不能实现特定规则,那么应该选择触发器;如果触发器仍然不能实现特...

PL/SQL简单使用——导入、导出数据表

使用PL/SQL导出、导入表在使用PL/SQL操作oracle数据库时,经常使用的一个操作就是将自己写的数据表导出,或者想把他人的数据表导入到自己的数据库中。虽然是很简单的操作,但自己之前一直出错,所...

[oracle编程]pl/sql --标量 复合变量以及游标的简单使用

说明: 使用oracle10.2 scott方案下的emp表做的练习,所有块都验证过 注意: 要先打开oracle的打印选项 声明:  多处参照韩顺平oracle视频,所以命名基本出现为sp_.....

PL/SQL编程之八-触发器

8.1 触发器类型   触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运...

Ch8 PL/SQL编写触发器

块分匿名块,命名块(1子程序含过程和函数,2触发器) 触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的DML语句(Insert,update,delete)在指定的表上发出时,Ora...

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

ORACLE PL/SQL编程之:把触发器说透         触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL中触发器的简单使用
举报原因:
原因补充:

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