PL/SQL触发器

  • Post author:
  • Post category:其他


oracle 学习笔记


目录


1.触发器定义


2.触发器功能


3.触发器的组成部分


4.创建触发器语法


4.1触发器语法


4.2创建触发器


5.触发器类型


5.1触发器类型:


5.2行级触发器


5.3语句级触发器


5.4视图级触发器(instead of)


6.启动、禁用、删除触发器


1.触发器定义

触发器是当特定事件出现时自动执行的存储过程 特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用

2.触发器功能

  • 自动生成数据
  • 自定义复杂的安全权限
  • 提供审计和日志记录
  • 启用复杂的业务逻辑

3.触发器的组成部分

触发器语句(事件)

定义激活触发器的 DML 事件和 DDL 事件

触发器限制

执行触发器的条件,该条件必须为真才能激活触发器

触发器操作(主体)

包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行

4.创建触发器语法

4.1触发器语法

create [or replace] trigger trigger_name

before | after | instead of   –触发时间

insert[or] | update[or] | delete  –触发事件

[of col_name]  –指定将被更新的列名

on table_name –指定触发器相关联的表或视图

[for each row]  –触发类型

[when(condition)]–触发条件

pl/sql_block;

4.2创建触发器

创建触发器

create or replace trigger tri_1
after
insert
on emp
begin
  dbms_output.put_line('添加成功');
end; 

测试

insert into emp values(7772,'sun','clerk',8888,sysdate,800,10,20);

5.触发器类型

5.1触发器类型有:

1.模式(DDL)触发器:在模式中执行DDL语句时执行

2.数据库级触发器:在发生打开、关闭、登录和退出数据库等系统事件时执行

3.DML触发器:在对表或视图执行DML语句时执行

行级触发器:无论受影响的行数是多少,都只执行一次

语句级触发器:对DML语句修改的每个行执行一次

视图触发器:用于用户不能直接使用 DML 语句修改的视图

5.2行级触发器

create table test_trg
          (id number, name varchar2(20));
create sequence seq_test;
create or replace trigger bi_test_trg
	before insert or update of id
	on test_trg
	for each row
begin
    if inserting then
      select seq_test.nextval into :new.id from dual;
    else
      raise_application_error(-20020, '不允许更新id值!');
    end if;
end;

5.3语句级触发器

create or replace trigger trgdemo
   after insert or update or delete
   on order_master
begin
   if updating then
     dbms_output.put_line(‘已更新 order_master 中的数据');
   elsif deleting then
     dbms_output.put_line(‘已删除 order_master 中的数据');
   elsif inserting then
     dbms_output.put_line(‘已在 order_master 中插入数据');
   end if;
end;

5.4视图级触发器(instead of)

create or replace trigger upd_ord_view
   instead of update
   on ord_view
   for each row
begin
   update order_master  set vencode=:new.vencode 
   where orderno = :new.orderno;
   dbms_output.put_line(‘已激活触发器');
end;

6.启动、禁用、删除触发器

alter trigger trigger_name disable;--禁用触发器
alter trigger trigger_name enable;--启动触发器
--删除触发器
drop trigger trigger_name;



版权声明:本文为m0_59822568原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。