oracle PL/SQL编程语句之触发器

(本文章内容仅在windows10下经测试能够运行,不能保证其他环境下的可靠性)

目录

1)触发器的概念

2)触发器的分类

3)PL/SQL触发器语句即:old、:new伪对象的值

4)语句级触发器的创建和使用

5) 行级触发器的创建和使用

6)使用触发器实现主键自增

 

 

触发器的概念

定义一个规则,在增删改操作时,只有满足规则,自动触发,无需调用。

 

触发器的分类

1)语句级触发器:不包含for each row

2)行级触发器:包含for each row

使用for each row主要是为了使用:old和:new伪对象

 

PL/SQL触发器语句即:old、:new伪对象的值

详情参照下表:

语句 :old :new
insert 空值 插入的数据
update 修改前的数据 修改后的数据
delete 删除前的数据 空值

 

语句级触发器的创建和使用

语法:
create [or replace] trigger 触发器名
  after/before
  insert/update/delete on 表名
declare
定义变量
begin
触发器语句
end 触发器名;

 

使用语句级触发器实现:在person表插入一条记录后输出"一个新员工入职"

示例代码如下:

create or replace trigger t1
  after insert on person 
declare
begin
  dbms_output.put_line('一个新员工入职');
end t1;

注意,在触发器语句的定义时,存在中文,可能会导致触发器创建后,伴随红叉,如不能解决中文问题,建议不使用中文。

 

行级触发器的创建和使用

语法:

create [or replace] trigger 触发器名
  before/after
  insert/update/delete
  on 表名
  for each row
declare
声明变量
begin
触发器语句(可以使用:old和:new)
end 触发器名;

 

使用行级触发器实现:在修改emp员工信息时,薪水下降时报错

示例代码如下:

create or replace trigger t2
before update on emp
for each row
declare

begin
  if :old.sal > :new.sal then
    raise_application_error(-20001,'不能降薪');
    end if;
end t2; 

注意:raise_application_error(number,varchar2);函数的第一个参数的范围为-20001~-20999

 

 

使用触发器实现主键自增

示例代码如下:

 

--使用触发器实现主键自增
create or replace trigger autoid
before
insert on person
for each row
declare
begin
  select s_person.nextval into :new.pid from dual;
end autoid;

 

posted @ 2020-06-07 12:55  DNoSay  阅读(386)  评论(0编辑  收藏  举报