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记录的日志:

三、行触发器                                          

现在需求是 由触发器来维护t_booktype的num这个字段;当t_book的typeId为1的 有insert/delete时,触发器自动更新t_booktype表的num字段:
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)触发器的更多相关文章

  1. Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

    触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的 ...

  2. oracle学习操作(1)

    一.oracle表及表空间: 1.查看用户.用户表空间等,需要sysdba登陆: select username, default_tablespace from dba_users;   2.一个数 ...

  3. Oracle学习笔记之触发器

    触发器 触发器(trigger)是一些过程,与表关系密切,用于保护表中的数据,当一个基表被修改(INSERT.UPDATE或DELETE)时,触发器自动执行,例如通过触发器可实现多个表间数据的一致性和 ...

  4. oracle 学习笔记之触发器

    说明 数据库触发器是一个与表相关联的.存储的PL/SQL程序. 每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序 ...

  5. Oracle学习笔记十三 触发器

    简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用.   触发器的功能: 1.自动生成数据 2.自定义复杂的安全权限 3.提供审计和 ...

  6. Oracle学习操作(7)用户、权限、角色

    一.oracle用户: 二.权限 1.系统权限: sys登陆创建c##test用户后,给用户c##test授权,并且带有传播性: SQL> create user c##test identif ...

  7. Oracle学习操作(6)函数与存储过程

    一.oracle自定义函数 1.不带参数的函数: 返回t_book表的总条数: SQL> create function getBookCount return number as begin ...

  8. Oracle学习操作(3)

    一.if条件语句 set serverout on; ; v ):='world'; begin dbms_output.put_line('hello'||n||v); end; / hello1w ...

  9. Oracle 学习之触发器

    1. 触发器简介 触发器是存储在数据库服务器中的程序单元,当一个表或一个视图被改变,或者数据库发生某些事件时,Oracle会自动触发触发器,并执行触发器中的代码.只有在触发器中定义的事件发生时,触发器 ...

随机推荐

  1. Struts2内置校验器——完整实例代码

    一.校验器的配置风格 1.字段校验器: <field name="被校验的字段"> <field-validator type="校验器名"& ...

  2. pandas 常用语句

    pandas的功能非常强大,支持类似与sql的数据增.删.查.改,并且带有丰富的数据处理函数: 支持时间序列分析功能:支持灵活处理缺失数据等. pandas的基本数据结构是Series和DataFra ...

  3. SharePoint 2010 Ribbon with wrong style in Chrome and Safari

    When we add custom ribbon to SharePoint 2010, it may display well in IE but not in Chrome and Safari ...

  4. Iterator、Iteratable与ListIterator

    Iteratable: public interface Iterable<T> { Iterator<T> iterator(); default void forEach( ...

  5. Generate And Play A Tone In Android hacking

    /*********************************************************************************** * Generate And ...

  6. Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束”

    Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束 Sql 中的连接查询:就是为了避免笛卡尔积,因为涉及到多表查询的化,不使用连接查询,会先将多个互相乘,求出笛卡尔积,然后在在里面查询符合的 ...

  7. Windows7系统中nginx与IIS服务器搭建集群实现负载均衡

    10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡   分布式,集群,云计算机.大数据.负载均衡.高并发······当耳边响起这些词时,做为一个菜鸟程序猿无疑 ...

  8. 习题3.5 求链表的倒数第m个元素(20 分)浙大版《数据结构(第2版)》题目集

    请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素. 函数接口定义: ElementType Find( List L, int m ); 其 ...

  9. test20180922 扭动的树

    题意 分析 二叉查找树按照键值排序的本质是中序遍历,每次我们可以在当前区间中提取出一个根,然后划分为两个子区间做区间DP.记\(f(i,j,k)\)表示区间[i, j]建子树,子树根节点的父亲是第k个 ...

  10. Oracle 存储过程了解

    简要记录存储过程语法与Java程序的调用方式 一 存储过程 首先,我们建立一个简单的表进行存储过程的测试 createtable xuesheng(id integer, xing_ming varc ...