PL/SQL触发器

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值