1 触发器
概念:trigger。逻辑对象的一种。当dml的增删改语句执行时,自动触发一系列动作。
分类:dml触发器。ddl触发器(很少见)
sql:ddl,dml,dcl
按触发的时间分:
语句执行前-->[行变化之前-->行变化之后]-->语句执行后
update emp set sal=sal*2; //一共有5条记录。

按触发的语句分:insert触发,update触发,delete触发。

对于行触发器:
:new--执行后的记录
:old--执行前的记录。delete
注意:
a select不能配置触发器。触发器耗费资源,不宜过多。
b 在触发器内部,可以通过raise_application_error方法来抛出异常,取消原来的修改动作。

应用:

a 备份
b 防止不当的修改数据
c 省略主键的自增

案例

--1 禁止将emp的用户名修改为含有sb关键字
--创建emp表的update行前触发器
create or replace trigger emp_update_ename_tri
before update on scott.emp for each row
declare
begin
if (instr(upper(:new.ename),'SB')>0) then
raise_application_error(-20001,'禁止将emp表的用户名修改为含SB');
end if;
dbms_output.put_line('修改emp成功!'||sysdate);
end; --测试触发器
update scott.emp set ename='SSSA' where empno='7369' --2 备份表的测试
--删除scott.emp表时,可以自动备份表插入被删除的记录
--创建备份表
create table emp_bk as (select * from scott.emp)
truncate table emp_bk
--
select * from emp_bk; --创建scott.emp的delete行前触发器 create or replace trigger emp_delete_bk_tri
before delete on scott.emp for each row
declare
begin
dbms_output.put_line('开始备份...');
insert into emp_bk values(:old.empno,:old.ename,:old.job,
:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
dbms_output.put_line('完成备份...');
end; delete from scott.emp where empno='7369'
delete from scott.emp where ename like '%黑%' select * from scott.emp --3 免主键的自增 create table person
(
pid number primary key ,
pname varchar2(20) not null
)
select * from person;
create sequence person_se//最快创建序列方式 truncate table person;//清空表记录 insert into person values(person_se.nextval,'白'||person_se.currval);
insert into person (pname) values('白100'); --创建insert行前触发器,可以省略主键的自增
create or replace trigger person_inser_tri
before insert on person for each row
declare
v_no number;
v_count number;
begin
if(:new.pid is null) then
loop
select person_se.nextval into v_no from dual;
select count(1) into v_count from person where pid=v_no;
if(v_count=0) then --此次生成的新序号不存在的,是有效的
:new.pid := v_no;
exit;
end if;
end loop;
end if;
end; insert into person (pid,pname) values('38','白100');

  

触发器运用示例---laobai的更多相关文章

  1. 【mysql】mysql触发器使用示例

    mysql触发器 时间点:before/after 触发事件: update/delete/insert 时间点+触发事件:构成一个完整的触发器的触发时机: 一个触发时机最多只能由1个Trigger: ...

  2. (转)MySQL触发器trigger示例详解

    一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...

  3. 一个SQLSERVER触发器的示例

    CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE AS BEGIN declare @WorkOrderID varchar(20 ...

  4. 一个Oracle触发器的示例

    CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder for each row declare ...

  5. SQL Server 触发器创建、删除、修改、查看示例

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...

  6. 问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

    ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创 ...

  7. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  8. SQL知识整理一:触发器、存储过程、表变量、临时表

    触发器 触发器的基础知识 create trigger tr_name on table/view {for | after | instead of } [update][,][insert][,] ...

  9. oracle 触发器学习

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

随机推荐

  1. Oracle 12c 使用scott等普通用户的方法

    目录: 一.前言 二.使用普通用户 三.自动启动PDB 一.前言 最近电脑上安装了oracle 12c数据库,想体验下新特性.安装完后,便像11g一样在dos窗口进行下面的操作: SQL Produc ...

  2. js 输出数组最大值

    ,,,,]; ]; ; i < run.length; i++) { if (max<run[i]) { max=run[i]; }else{ max=max; } } alert(max ...

  3. jackson annotations注解详解

    jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081

  4. 利用mysql-proxy进行mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 mysql-proxy-0 ...

  5. [WPF系列]-ListBox

    引言 本文就WPF中的ListBox常用项给以实例代码演示,包括隐蔽属性的设置,Style设置,以及ControlTemplate的自定义.   Listbox平滑滚动 <ListBox Ite ...

  6. 使用Ecplise git commit时出现"There are no stages files"

    异常   解决方案 进入Window--Preferences--Team--Git--Committing,反选下图红圈部分:   保存后即可出线我们熟悉的提交代码界面啦:

  7. textarea去掉右侧滚动条,去掉右下角拖拽

    代码: <TEXTAREA style= "overflow:hidden; resize:none; "> </TEXTAREA> 当使用背景图片的时候, ...

  8. css的命名规则

    本文转载自谈笑涧<css的命名规则> 操作系统版本:Windows 7 浏览器版本:IE6,IE7,IE8,Firefox 3.6.2,Safari 4.0.4,Chrome 5.0.35 ...

  9. iframe异步加载技术及性能

    我们会经常使用iframes来加载第三方的内容.广告或者插件.使用iframe是因为它可以和主页面并行加载,不会阻塞主页面.当然使用iframe也是有利有弊的:Steve Souders在他的blog ...

  10. Linq to Xml读取复杂xml(带命名空间)

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是Linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写.之前做的一个项目有一个很变态的需求:C ...