Oracle-DDL 3- 触发器
DDL-数据定义语句:
四、触发器
-- 触发器(trigger),与某些特定的操作绑定,当达到触发条件后会自动触发
--主要用来将某些操作的过程记录下来,或者阻止某些非法的操作,保护数据
/*
触发条件:
触发时间 —— before/after
触发操作 —— insert/update/delete
触发对象 —— 表和列
触发范围 —— 所有数据或者指定条件
*/
/*
create [or replace] trigger 触发器名称
before / after
insert or update or delete
[ of 列 ] on 表
[for each row
when ( 限定条件 )]
begin
操作语句;
end;
for each row 表示每行符合条件的数据都触发
有了for each row可以不写when,有了 when 必须写for each row
when 后面的限定条件必须使用 old 或 new 来指明是以修改前的或者修改后的数据作为条件
*/
1.如果对emp表中30号部门员工的职位进行修改,
则将员工的姓名、原职位、新职位和修改时间记录下来。
--先创建一张表用来记录相关的数据
CREATE TABLE change_job
(
ename VARCHAR2(20),
old_job VARCHAR2(20),
new_job VARCHAR2(20),
ch_time DATE);
SELECT * FROM change_job;
--分析触发条件
--触发时间:before
--触发操作:update
--触发对象:emp表job列
--触发范围:30号部门
CREATE TRIGGER tri1
BEFORE
UPDATE
OF job ON emp
FOR EACH ROW
WHEN (old.deptno = 30)
BEGIN
INSERT INTO change_job
VALUES (:old.ename,:old.job,:new.job,SYSDATE);
--begin部分如果要调用表中的数据,使用:old 和 :new 限定
END;
UPDATE emp
SET job = 'SALESMAN'
WHERE deptno = 30;
SELECT * FROM emp;
2.不允许在周末对emp表中的数据进行更改
--触发条件
--触发时间:before
--触发操作:update,delete,insert
--触发对象:emp表
--触发范围:所有数据
--如果触发条件是表中的数据在when中去设置条件
--如果触发条件是客观条件,与表中的数据无关,在begin部分使用条件判断语句 if 来实现
--触发器中要阻止某些操作可以使用raise_application_error 方法来提交一个系统错误
--raise_application_error( 错误id ,错误提示)
--错误id范围是 -20001~ -29999 之间,以免跟系统错误的 id 重复,错误提示自定义字符串
CREATE TRIGGER tri2
BEFORE
INSERT OR UPDATE OR DELETE
ON emp
BEGIN
IF TO_CHAR(SYSDATE,'fmDAY') IN ('SATURDAY','SUNDAY') THEN
RAISE_APPLICATION_ERROR(-20001,'can not change data at weekend');
END IF;
END;
DELETE emp
WHERE ename = 'ALLEN';
【练习】
创建一个触发器,要求对emp表中的删除操作进行判断,不能删除1981年6月1日之前入职的员工
create trigger emp_date_protect
before
delete
on emp
for each row
when (old.hiredate < to_date('19810601','YYYYMMDD'))
begin
RAISE_APPLICATION_ERROR(-20001,'Can NOT delete employees hired before June 1st 1981!');
end;
Oracle-DDL 3- 触发器的更多相关文章
- 15. DML, DDL, LOGON 触发器
触发器可以理解为由特定事件触发的存储过程, 和存储过程.函数一样,触发器也支持CLR,目前SQL Server共支持以下几种触发器: 1. DML触发器, 表/视图级有效,可由DML语句 (INSER ...
- Oracle中创建触发器示例及注意事项
1.oracle 中创建触发器示例 CREATE TABLE "CONCEPT"."FREQUENCYMODIFYLOG" ( "FREQUENCYI ...
- Oracle创建禁止DDL的触发器
create or replace trigger forbid_ddl before ddl on DATABASEbegin --if ora_dict_obj_owner = or ...
- Oracle 学习之触发器
1. 触发器简介 触发器是存储在数据库服务器中的程序单元,当一个表或一个视图被改变,或者数据库发生某些事件时,Oracle会自动触发触发器,并执行触发器中的代码.只有在触发器中定义的事件发生时,触发器 ...
- oracle数据库之触发器
触发器是许多关系数据库系统都提供的一项技术.在 ORACLE 系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的 PL/SQL 块. 一. 触发器类型 触发器在数据库里以独立的对象存储,它与 ...
- (八)Oracle学习笔记—— 触发器
1. 触发器简介 触发器在数据库里以独立的对象存储,类似于过程(procedure)和函数(function),都有声明,执行和异常处理过程的PL/SQL块.它与存储过程和函数不同的是,存储过程与函数 ...
- Oracle数据库之触发器(一)
触发器trigger是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发.比如当对一个表进行操作(in ...
- PowerDesginer 生成的Oracle 11g 组合触发器代码编译错误(29): PLS-00103
问题描述: 采用PowerDesigner15针对Oracle 11g 创建物理数据模型,想实现一个字段的自增,采用如下步骤: 1.创建序列,命名为Sequence_1; 2.在自增字段编辑窗口中,选 ...
- Oracle基础<5>--触发器
一.触发器 触发器是当特定事件出现时自动执行的代码块.比如,每次对员工表进行增删改的操作时,向日志表中添加一条记录.触发器和存储过程是由区别的:触发器是根据某些条件自动执行的,存储过程是手动条用的. ...
- Oracle系列之触发器
涉及到表的处理请参看原表结构与数据 Oracle建表插数据等等 创建一个触发器,使其可以修改tb_Department表的deptno. create or replace trigger upda ...
随机推荐
- PTA 二叉树路径
二叉树的路径 (25 分) 二叉树是一种普通的数据结构.给出一棵无限的二叉树,节点被标识为一对整数,构造如下: (1)树根被标识为整数对(1,1). (2)如果一个节点被标识为(a,b ...
- html基础(img、a、列表 )
图片标签(img) <img src="图片路径" alt="图片描述 图片无法正常显示出现文字" title="爱你"/> i ...
- R-三次指数平滑法实践
data <- read.csv("H://day_shuaka.csv") raw0 <- data[359:752,] raw0$weekday <- as. ...
- [CSP-S模拟测试]:二叉搜索树(DP+贪心)
题目传送门(内部题99) 输入格式 第一行一个整数$n$,第二行$n$个整数$x_1\sim x_n$. 输出格式 一行一个整数表示答案. 样例 样例输入: 58 2 1 4 3 样例输出: 数据范围 ...
- $\LaTeX$数学公式大全5
$5\ Variable-sized\ symbols(displayed\ formulae\ show\ larger\ version)$$\sum$ \sum$\prod$ \prod$\co ...
- 系统芯片 SoC
SoC的定义多种多样,由于其内涵丰富.应用范围广,很难给出准确定义.一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内 ...
- 测试linux服务器是否能接入微信
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 php.代码 <?php $a = $_GE ...
- dnSpy PE format ( Portable Executable File Format)
Portable Executable File Format PE Format 微软官方的 What is a .PE file in the .NET framework? [closed] ...
- Windows 全绿色安装Mysql
1.从Oracle官网上下载Mysql的Windows安装包,注意要下载Zip文件 2.将Mysql的Zip文件下载到本地电脑指定目录下 3.配置my.inia. 在<安装目录>下创建一个 ...
- ceph-----常用命令
#查看存储池 ceph osd lspools #设置存储池副本数 ceph osd pool set data size 3 #查看存储池具体信息 ceph osd pool ls detail # ...