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. Linux命令学习总结:rm命令

    命令简介:   该命令用来删除Linux系统中的文件或目录.通常情况下rm不会删除目录,你必须通过指定参数-r或-R来删除目录.另外rm通常可以将该文件或目录恢复(注意,rm删除文件其实只是将指向数据 ...

  2. MS SQL统计信息浅析下篇

       MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识.理解,于是有了MS SQL统计信息浅析下篇. 下面是我对SQL Serve ...

  3. Elasticsearch-HttpServerModule

    HttpServerModule的请求主要由HttpServer中的HttpServerTransport(默认为NettyHttpServerTransport)类处理. NettyHttpServ ...

  4. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  5. Function.prototype.call 和 Function.prototype.apply 的区别

    call和apply函数是function函数的基本属性,都可以用于更改函数对象和传递参数,是前端工程师常用的函数.具体使用方法请参考以下案列: 例如: 申明函数: var fn = function ...

  6. Centos6下安装Hadoop2.6 问题总结

    一. 安装背景:VirtualBox下安装三台Centos6.8虚拟机(一主:master, 两从:slave1,slave2) Centos版本:CentOS-6.8-x86_64 网络配置:三台虚 ...

  7. QT210 android2.3 和android4.0 烧写编译日记

    QT210下载烧录编译android2.3过程 工作环境:ubuntu12.04.5 | QT210开发板光盘 | QT210开发板 android2.3编译环境:gcc version 4.4.7  ...

  8. 每天一个linux命令(3):pwd命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  9. u3d_Shader_effects笔记6 第二章 animating sprite

    1.前面的心情 上班看shader我也是醉了.写完这篇看代码去了,不过看着看着恐怕就会困.... 还有就是上天,我该怎么做,下一步,大懒: 2.参考源头 http://blog.csdn.net/ca ...

  10. PAT 1038. 统计同成绩学生(20)

    本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查 ...