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 SendMail发送邮件失败诊断案例(二)

    Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var ...

  2. tar解压问题gzip: stdin: not in gzip format

    如下所示,使用tar -zxvf解压文件时遇到"gzip: stdin: not in gzip format"等错误: [root@DB-Server tmp]# [root@D ...

  3. SQLServer中修改字段为空

    ALTER 表名 table1 ALTER COLUMN [字段] 类型 NULL; 例如: ) COLLATE Chinese_PRC_CI_AS NULL;

  4. 【转】hive优化之--控制hive任务中的map数和reduce数

    一.    控制hive任务中的map数:  1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...

  5. explicit抑制隐型转换

    本文出自 http://www.cnblogs.com/cutepig/ 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: clas ...

  6. java的输入输出及相关快捷键

    首先:导入包import java.util.Scanner; 然后:在主函数中创建对象,eg:Scanner input=new Scanner(System.in);​ 最后,如果要输入字符串,则 ...

  7. 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现2

    权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现 ----参考Nginx中负载均衡算法实现 与上一遍博客 http://www.cnblogs.com/hu ...

  8. Vim自动补全神器–YouCompleteMe

    一.简介 YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势 1.基于语义补全 2.整合实现了多种插件 clang_complete.AutoComplPop .Super ...

  9. iftop与dstat-一次网站故障分析经历

    一次网站分析与解决的经历,最后结果虽然很简单但是过程比较曲折.记录一下: 今天访问网站首页十分缓慢,页面半天都加载不出来.于是上服务器看看情况,通过top看到load和cpu以及磁盘io都很低,只能祭 ...

  10. 【C#】【Thread】CountdownEvent任务并行

    System.Threading.CountdownEvent  是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent  专门用于以下情况:您必须使用 ...