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 ...
随机推荐
- 创建springboot项目的三种方法(参考
https://blog.csdn.net/mousede/article/details/81285693 https://blog.csdn.net/weixin_42194143/article ...
- jQuery动画之停止动画
语法格式: $(selector).stop(true, false); 第一个参数: + ture: 后续动画不执行 false:后续动画会执行 第二个参数: true: 立即执行完成当前动画 fa ...
- font属性
font属性 font属性设置css字体
- 流程控制(判断if switch)
判断语句 判断条件比特别多大 时候用switch 其他时候if语句比较方便 1.if……else a) if(判断条件) {执行语句:} b) else if (判断语句){执行语句:} ...
- C++入门经典-例9.3-类模板,简单类模板
1:使用template关键字不但可以定义函数模板,而且可以定义类模板.类模板代表一族类,它是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型.类 ...
- IDEA如何配置jdk路径
首先要确定你的jdk已经安装好了 Win + R键,输入cmd 输入java -version 当返回这玩意的时候,就证明你的jdk已经安装成功,可以用IDEA进行配置了 打开IDEA的 File → ...
- tp5中很牛皮的一句sql语句,三个条件(两个不确定条件,一个硬性条件)
$result = Db::table('xxxxxx') // 表名 ->alias('g') ->join('xxxxx_2 u','g.user_id = u.id') -> ...
- vue-cli 3x 的使用
当我们使用 npm 下载过文件之后,里面就会有缓存 我们要使用 npm cache clean --force 来清除缓存 创建项目:vue create 文件名 然后:cd 文件名 启动程序:npm ...
- ASimpleCache源码分析
ASimpleCache里只有一个JAVA文件——ACache.java,首先我用思维导图制作了ACache类的详细结构图: 通过分析官方给的demo来驱动源码分析吧 以字符串存储为例(官方给的dem ...
- 学习前端第一天心得体会(初步了解HTML5的新特性以及和HTML的区别)
一.HTML5是什么? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提 ...