Oracle学习操作(5)触发器
Oracle触发器
一、触发器简介
具备某些条件,由数据库自动执行的一些DML操作行为;
二、语句触发器

现在数据库创建t_book表;t_booktype表:t_book表的typeid存在外键参考t_booktype的id:

1.需求:当前用户不是CC时,insert/delete/update t_book表就提示‘权限不足’:
SQL> create or replace trigger tr_book
2 before insert or update or delete
3 on t_book
4 begin
5 if user!='CC' then
6 raise_application_error(-20001,user||'权限不足');
7 end if;
8 end;
9 / 触发器已创建 //如果没有创建触发器的权限,sys dba登陆:
SQL> grant create trigger to c##chengyu;
当前用户为c##chengyu,在t_book中插入数据报错:
SQL> insert into t_book values(4, 'xxx', 1);
insert into t_book values(4, 'xxx', 1)
*
第 1 行出现错误:
ORA-20001: C##CHENGYU权限不足
ORA-06512: 在 "C##CHENGYU.TR_BOOK", line 3
ORA-04088: 触发器 'C##CHENGYU.TR_BOOK' 执行过程中出错
2.触发器谓词: 把用户的某些操作记录在日志中: 现在将t_book的增、删、改操作记录到t_book_log这个表中:
SQL> create or replace trigger tr_book_log
2 after insert or update or delete
3 on t_book
4 begin
5 if updating then
6 insert into t_book_log values(user,'update',sysdate);
7 else if inserting then
8 insert into t_book_log values(user,'insert',sysdate);
9 else if deleting then
10 insert into t_book_log values(user,'delete',sysdate);
11 end if;
12 end if;
13 end if;
14 end;
15 / 触发器已创建 //user:内置变量,能够获取到当前用户;
进行一些增、删、改的操作,查看t_book_log记录的日志:

三、行触发器

SQL> create trigger tr_book_add
2 after insert
3 on t_book
4 for each row
5 begin
6 update t_booktype set num = num+1 where id=:new.typeid;
7 end;
8 / 触发器已创建 SQL> create trigger tr_book_delete
2 after delete
3 on t_book
4 for each row
5 begin
6 update t_booktype set num = num-1 where id=:old.typeid;
7 end;
8 / 触发器已创建 //:new 新增的行记录
//:old 删除的行记录;
现在新增记录,查看num已自动维护:

SQL> delete from t_book where id = 4;
已删除 1 行。
SQL> select * from t_booktype;
ID TYPENAME NUM
---------- ---------- ----------
1 计算机类 2
2 生物类 1
四、触发器禁用和开启

禁用不等于删除,只是将其不起作用,可以再次开启;
Oracle学习操作(5)触发器的更多相关文章
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的 ...
- oracle学习操作(1)
一.oracle表及表空间: 1.查看用户.用户表空间等,需要sysdba登陆: select username, default_tablespace from dba_users; 2.一个数 ...
- Oracle学习笔记之触发器
触发器 触发器(trigger)是一些过程,与表关系密切,用于保护表中的数据,当一个基表被修改(INSERT.UPDATE或DELETE)时,触发器自动执行,例如通过触发器可实现多个表间数据的一致性和 ...
- oracle 学习笔记之触发器
说明 数据库触发器是一个与表相关联的.存储的PL/SQL程序. 每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序 ...
- Oracle学习笔记十三 触发器
简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用. 触发器的功能: 1.自动生成数据 2.自定义复杂的安全权限 3.提供审计和 ...
- Oracle学习操作(7)用户、权限、角色
一.oracle用户: 二.权限 1.系统权限: sys登陆创建c##test用户后,给用户c##test授权,并且带有传播性: SQL> create user c##test identif ...
- Oracle学习操作(6)函数与存储过程
一.oracle自定义函数 1.不带参数的函数: 返回t_book表的总条数: SQL> create function getBookCount return number as begin ...
- Oracle学习操作(3)
一.if条件语句 set serverout on; ; v ):='world'; begin dbms_output.put_line('hello'||n||v); end; / hello1w ...
- Oracle 学习之触发器
1. 触发器简介 触发器是存储在数据库服务器中的程序单元,当一个表或一个视图被改变,或者数据库发生某些事件时,Oracle会自动触发触发器,并执行触发器中的代码.只有在触发器中定义的事件发生时,触发器 ...
随机推荐
- QueryPerformanceFrequency
var c1: int64; t1, t2: int64; QueryPerformanceFrequency(c1); QueryPerformanceCounter(t1); // GetSell ...
- 福大软工 1816:项目UML设计(团队作业三)
项目UML设计(团队) 团队信息 团队名:第三视角 各成员学号及姓名 姓名 学号 博客链接 张扬(组长) 031602345 http://www.cnblogs.com/sxZhangYang/p/ ...
- Mac OS X 10.9下解决cocos2d-x在Xcode4.6.x的模板不显示问题
最近将iMac 升级到10.9了,奇怪的事情发生了,cocos2d-x的模板不见了,鼓捣了半天发现问题所在 打开xcode新建工程却找不到cocos2d-x的模板. 经过在网上的苦苦搜寻和试验后,找到 ...
- L217
China has announced that it will further simplify the approval procedures for the private sector to ...
- jsp:incloud用法
为什么要用jsp:incloud 因为单独一个页面太大,需要嵌套子页面,当请求有父页面的时候,子页面会自动加载<jsp:include page="/agentProfitShareN ...
- django页面导出excel
from django.http import HttpResponse from xlwt import * from io import BytesIO def excel_export(requ ...
- nw 注册快捷键
var option = { key : "Escape", }; var shortcut = new gui.Shortcut(option); gui.App.registe ...
- [Spring Boot] Spring Boot启动过程源码分析
关于Spring Boot,已经有很多介绍其如何使用的文章了,本文从源代码(基于Spring-boot 1.5.6)的角度来看看Spring Boot的启动过程到底是怎么样的,为何以往纷繁复杂的配置到 ...
- runtime error (运行时错误)
比如说: ①除以零 ②数组越界:int a[3]; a[10000000]=10; ③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+10000 ...
- C++基础之 成员变量初 始化赋值
摘要: C++成员变量 初始化赋值 你都清楚吗?还有好多坑,好多细节也不知道... 今天在写一个类的时候,由于该类的一个成员变量是引用,所以初始化出现了问题,查了一下之后,才发现,原来引用的初始化和c ...