触发器运用示例---laobai
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的更多相关文章
- 【mysql】mysql触发器使用示例
mysql触发器 时间点:before/after 触发事件: update/delete/insert 时间点+触发事件:构成一个完整的触发器的触发时机: 一个触发时机最多只能由1个Trigger: ...
- (转)MySQL触发器trigger示例详解
一.什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[ ...
- 一个SQLSERVER触发器的示例
CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE AS BEGIN declare @WorkOrderID varchar(20 ...
- 一个Oracle触发器的示例
CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder for each row declare ...
- SQL Server 触发器创建、删除、修改、查看示例
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- 问题: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 创 ...
- Oracle触发器原理、创建、修改、删除
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...
- SQL知识整理一:触发器、存储过程、表变量、临时表
触发器 触发器的基础知识 create trigger tr_name on table/view {for | after | instead of } [update][,][insert][,] ...
- oracle 触发器学习
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
随机推荐
- Linux SendMail发送邮件失败诊断案例(二)
Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var ...
- tar解压问题gzip: stdin: not in gzip format
如下所示,使用tar -zxvf解压文件时遇到"gzip: stdin: not in gzip format"等错误: [root@DB-Server tmp]# [root@D ...
- SQLServer中修改字段为空
ALTER 表名 table1 ALTER COLUMN [字段] 类型 NULL; 例如: ) COLLATE Chinese_PRC_CI_AS NULL;
- 【转】hive优化之--控制hive任务中的map数和reduce数
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...
- explicit抑制隐型转换
本文出自 http://www.cnblogs.com/cutepig/ 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: clas ...
- java的输入输出及相关快捷键
首先:导入包import java.util.Scanner; 然后:在主函数中创建对象,eg:Scanner input=new Scanner(System.in); 最后,如果要输入字符串,则 ...
- 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现2
权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现 ----参考Nginx中负载均衡算法实现 与上一遍博客 http://www.cnblogs.com/hu ...
- Vim自动补全神器–YouCompleteMe
一.简介 YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势 1.基于语义补全 2.整合实现了多种插件 clang_complete.AutoComplPop .Super ...
- iftop与dstat-一次网站故障分析经历
一次网站分析与解决的经历,最后结果虽然很简单但是过程比较曲折.记录一下: 今天访问网站首页十分缓慢,页面半天都加载不出来.于是上服务器看看情况,通过top看到load和cpu以及磁盘io都很低,只能祭 ...
- 【C#】【Thread】CountdownEvent任务并行
System.Threading.CountdownEvent 是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent 专门用于以下情况:您必须使用 ...