广告
返回顶部
首页 > 资讯 > 精选 >Oracle DML触发器和DDL触发器怎么使用
  • 115
分享到

Oracle DML触发器和DDL触发器怎么使用

2023-07-05 11:07:41 115人浏览 安东尼
摘要

今天小编给大家分享一下oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧

今天小编给大家分享一下oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    一、概念

    触发器是Oracle数据库的对象,类似存储过程和函数。存储过程和函数需要用户显示调用才执行,而触发器是由一个事件来触发运行,当某个事件发生时会自动地隐式运行,不能被显示的调用。

    触发器的本质是存储过程,发生特定事件时Oracle会执行触发器中的代码,它的组成可以分为三个部分:

    触发器执行的条件,即触发器被触发的事件

    执行触发器的时间,发生事件之前(before)或发生事件之后(after)

    触发器要做的事情,就是触发器被触发以后具体想执行的任务(PL/sql语句块)

    Oracle的触发器分为 DML触发器、DDL触发器、替代触发器 和 系统触发器。

    二、DML触发器

    基于DML操作的触发器,细分又可以分为行触发器和语句触发器。

    2.1、语句触发器

    DML操作(insert、delete、update),不管SQL语句影响的记录是多少行,触发器只触发一次。

    2.2、行级触发器

    DML操作(insert、delete、update),SQL语句影响了多少行记录,触发器就触发多少次。

    行级触发器用for each row关键字。

    2.3、DML触发器语法:

    create [or replace] trigger 用户名.触发器名
           {before|after}      
           {delete|insert|update|[of列名]}
           on 表名
           [for each row [when 条件]]
    declare
      定义变量。
    begin
      PL/SQL语句块。                         
    end;

    参数说明:

    {before|after}: 指定触发器是在对表的操作发生之前触发还是之后触发。

    {delete|insert|update|[of列名]}: 触发在动作,可以指定多个动作,例如:insert or update。如果是update,update of 指定一个或多个字段,仅在这些字段被更新时才会触发。update of 的应用场景极少。

    [for each row]: 表示是行级触发器。

    [when 条件]: 只有满足when指定的条件,才会执行触发体中的代码,应用场景极少。

    2.4、触发器谓词:

    创建超女基本信息表T_GIRL,插入5条测试数据。

    old谓词:执行前的字段的值的名称,比如update一个表时,使用:old.columnname是指执行update操作之前的列的值。

    new谓词:执行后的字段的值的名称,比如update一个表时,使用:new.columnname是指执行 update操作之后的列的值。

    可以在触发器体的语句块中使用 inserting、updating、deleting谓词,这些谓词会返回相应的DML操作的布尔值,如果为true,则表示执行了相应的insert、update、delete操作。

    2.5、实例说明

    1)准备测试数据,创建超女基本信息表T_GIRL,插入5条测试数据。

    drop table T_GIRL;create table T_GIRL(  id        char(4)         not null,   -- 编号  name      varchar2(30)    not null,   -- 姓名  primary key(id)                       -- 指定id为表的主键);insert into T_GIRL(id,name) values('0101','西施');insert into T_GIRL(id,name) values('0102','貂禅');insert into T_GIRL(id,name) values('0103','妲已');insert into T_GIRL(id,name) values('0104','芙蓉姐姐');insert into T_GIRL(id,name) values('0105','神密猫女');

    2)创建SQL日志表。

    drop table T_SQL_LOG;create table T_SQL_LOG(  tname    varchar2(10),        -- 原表的表名。  srcrowid rowid,               -- 原表rowid。  sqltype  number(1),           -- SQL语句的类型:1-insert、2-update、3-delete。  trname  varchar2(10)          -- 触发器名。);

    3)创建语触发器TR_GIRL_1,如果对T_GIRL表做了insert、update和delete操作,把操作记录在T_SQL_LOG表中。

    create or replace trigger TR_GIRL_1  before update or delete or insert  on T_GIRLbegin  if inserting then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',null,1,'TR_GIRL_1');  end if;  if updating then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',null,2,'TR_GIRL_1');  end if;  if deleting then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',null,3,'TR_GIRL_1');  end if;end;

    4)创建行级语触发器TR_GIRL_2,如果对T_GIRL表做了insert、update和delete操作,把每一行的操作记录在T_SQL_LOG表中。

    create or replace trigger TR_GIRL_2  before update or delete or insert  on T_GIRL for each rowbegin  if inserting then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',:new.rowid,1,'TR_GIRL_2');  end if;  if updating then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',:new.rowid,2,'TR_GIRL_2');  end if;  if deleting then    insert into T_SQL_LOG(tname,srcrowid,sqltype,trname) values('T_GIRL',:old.rowid,3,'TR_GIRL_2');  end if;end;

    5)执行一条delete语句,从T_GIRL表中删除两行记录。

    delete from T_GIRL where id in ('0101','0102');

    6)查看T_SQL_LOG表中的结果。

    Oracle DML触发器和DDL触发器怎么使用

    三、DDL 触发器

    当执行DDL语句时会被触发。按照作用范围,分为schema trigger 和 database trigger。schema trigger 作用在一个用户上,database trigger 作用在整个数据库所有用户上。

    常用的DDL操作有:grant(授权),revoke(撤销授权),create(创建),drop(删除),alter(修改),comment(注释),audit(审核),rename(重命名)等。

    3.1、DDL触发器语法

    create [or replace] trigger 用户名.触发器名
           {before|after} {DDL事件} on {database|schema}
           [when 条件]
    declare
      定义变量。
    begin
      PL/SQL语句块。
    end;

    参数说明:

    {before|after}: 触发器是在DDL事件之前、之后触发。

    {database|schema}: 作用在一个用户上,还是全部的用户。

    [when 条件]: 只有满足when指定的条件,才会执行触发体中的代码,应用场景极少。

    3.2、DDL 事件

    Oracle DML触发器和DDL触发器怎么使用

    3.3、可用属性

    Oracle DML触发器和DDL触发器怎么使用

    3.4、实例说明

    限制scott用户的DLL操作,创建数据库对象时发出警告,删除数据库对象时阻止。

    1)创建触发器

    create or replace trigger scott.no_drop  before ddl on schemabegin  if ora_sysevent='CREATE' then    dbms_output.put_line('Warning !!! You have created a '||                         ORA_DICT_OBJ_TYPE||' called '||                         ORA_DICT_OBJ_NAME|| '; UserName:'||                         ORA_DICT_OBJ_OWNER||'; IP:'||                         ORA_CLIENT_IP_ADDRESS||'; event:'||                         ORA_SYSEVENT);  elsif ora_sysevent='DROP' then    RaiSE_APPLICATioN_ERROR(-20000,'Cannot drop the '||                            ORA_DICT_OBJ_TYPE||' named '||                            ORA_DICT_OBJ_NAME ||' as requested by '||                            ORA_DICT_OBJ_OWNER);  end if;end;

    2)测试触器(创建表),用scott用户登录。

    在上面创建的触发器中用到了dbms_output,在sqlplus中要先执行set serveroutput on;才能输出内容。

    Oracle DML触发器和DDL触发器怎么使用

    3)测试删除表,用scott用户登录。

    Oracle DML触发器和DDL触发器怎么使用

    4)测试删除表,用DBA用户登录,no_drop触发器只限scott用户,不限制其它用户。

    Oracle DML触发器和DDL触发器怎么使用

    以上就是“Oracle DML触发器和DDL触发器怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Oracle DML触发器和DDL触发器怎么使用

    本文链接: https://www.lsjlt.com/news/351461.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Oracle DML触发器和DDL触发器怎么使用
      今天小编给大家分享一下Oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
      99+
      2023-07-05
    • Oracle DML触发器和DDL触发器实例详解
      目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL...
      99+
      2023-03-13
      oracle 触发器 oracle触发器语句 oracle创建触发器语句
    • Oracle DML触发器和DDL触发器实例详解
      目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL 事件3.3、可用属性3.4、实例说明...
      99+
      2023-03-13
      oracle 触发器 oracle触发器语句 oracle创建触发器语句
    • oracle触发器定时触发怎么配置
      在Oracle数据库中,可以使用触发器来定时触发某些操作。触发器可在以下情况下自动触发:在插入、更新或删除表中的数据时,或在满足某些...
      99+
      2023-08-09
      oracle
    • Oracle触发器trigger怎么使用
      Oracle触发器(trigger)用于在指定的数据库操作发生时自动执行一段特定的代码,可以用于数据插入、更新或删除时执行特定的操作...
      99+
      2023-08-15
      Oracle trigger
    • oracle触发器是什么
      本篇文章给大家分享的是有关oracle触发器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle触发器是什么呢? 首先我们来了解一...
      99+
      2022-10-18
    • 怎么使用sql触发器
      本篇文章给大家分享的是有关怎么使用sql触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  sql中的触发器是对某个表进行操作时...
      99+
      2022-10-18
    • 怎么使用MySQL触发器
      这篇文章主要讲解了怎么使用MySQL触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。一、MySQL触发器创建:1、MySQL触发器的创建语法:CREATE [DEFINER...
      99+
      2022-10-18
    • Oracle行级触发器的使用
      oracle行级触发器的使用 1、创建触发器并使用dblink在插入时进行数据同步 异库异表同步 create or replace trigger triggerName --触发器名称 after insert on...
      99+
      2023-05-12
      Oracle行级触发器 Oracle触发器使用
    • Oracle 触发器trigger使用案例
      目录一、触发器定义二、触发器分类三、触发器功能四、触发器语法五、触发器使用案例案例1:向job1表中插入一条数据后输出 欢迎加入 语句案例2:数据校验,不允许星期二和星期四向emp1...
      99+
      2022-11-13
    • mysql触发器怎么用
      这篇文章给大家分享的是有关mysql触发器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明触发器也是存储过程程序的一种,而触发器内部的执行SQL语句是可以多行操作的。在MySQL的存储过程程序中,要定义结...
      99+
      2023-06-20
    • 怎么创建和使用mysql触发器
      这篇文章主要讲解了怎么创建和使用mysql触发器,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。什么是触发器 触发器用来在某些操作之后/之前,“自动”执行一些操作。(比...
      99+
      2022-10-18
    • MySQL触发器怎么创建和使用
      这篇文章主要介绍“MySQL触发器怎么创建和使用”,在日常操作中,相信很多人在MySQL触发器怎么创建和使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL触发器怎么...
      99+
      2022-10-19
    • SQL SERVER触发器怎么使用
      SQL Server触发器可以在数据库中的表上定义,当满足特定条件时,触发器会自动执行一些操作。以下是使用SQL Server触发器...
      99+
      2023-08-18
      SQL SERVER
    • 如何在Oracle中使用触发器
      如何在Oracle中使用触发器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。触发器类型触发器在数据库里以独立的对象存储,它与存储过程和函数...
      99+
      2022-10-18
    • Oracle的触发器trigger如何使用
      本篇内容主要讲解“Oracle的触发器trigger如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle的触发器trigger如何使用”吧!一、触发器定义Oracle触发器是使用者...
      99+
      2023-06-29
    • oracle触发器不生效怎么解决
      要解决Oracle触发器不生效的问题,可以按照以下步骤进行排查和处理:1. 检查触发器是否处于启用状态:使用以下SQL语句查询触发器...
      99+
      2023-08-08
      oracle
    • Java Quartz触发器CronTriggerBean怎么使用
      要使用Java Quartz触发器CronTriggerBean,您需要按照以下步骤进行操作:1. 创建一个CronTriggerB...
      99+
      2023-08-08
      Java CronTriggerBean
    • MySQL的触发器trigger怎么使用
      MySQL的触发器(trigger)可以在特定的数据库操作发生时自动执行一系列的SQL语句。触发器可以在插入、更新或删除数据时触发执...
      99+
      2023-08-11
      MySQL trigger
    • 怎么创建触发器
      怎么创建触发器?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。什么是触发器?触发器用来在某些操作之后/之前,“自动”执行一些操作。(比如插入了新的...
      99+
      2022-10-18
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作