首页 > 数据库 >oracle-触发器

oracle-触发器

时间:2023-11-15 19:11:52浏览次数:33  
标签:语句 tri 触发器 name 视图 trigger oracle

创建触发器的语法:

create [or replace] trigger tri_name

    [before | after | instead of] tri_event

         on table_name | view_name | user_name | db_name

         [referencing [:old] [:new]]

         [for each row [when tri_condition]]

begin

plsql_sentences:

end tri_name;

 

语句触发器

  1、创建语句级触发器

    语句级触发器,顾名思义,就是针对一条DML语句而引起的触发器执行。在语句级触发器中,不使用for each row子句,也就是说无论数据操作影响多少行,触发器都只会执行一次。

替换触发器

  2、创建替换触发器

    替换触发器——即instead of 触发器,它的“触发时机” 关键字是instead of,而不是before或after。与其它类型触发器不同是,替换触发器定义在视图上的,而不是定义

在表上。由于视图是由多个基表连接组成的逻辑结构,所以一般不允许用户进行DML操作(如insert、update、delete等操作),这样当用户为视图编写“替换触发器” 后,用户对视图的DML操作实际上就变成了执行触发器中的PL/SQL语句块,这样就可以通过在“替换触发器”中编写适当的代码对构成视图的各个基表进行操作。

  3、系统事件触发器

    从Oracle 8i开始,Oracle提供的系统触发器可以在DDL或数据库系统上被触发。DDL指的是数据定义语句,如create、alter和drop等。而数据库系统事件包括数据库服务器的启动(STARTUP)或关闭(SHUTDOWN),数据库服务器出错(SERVERERROR)等。

  语法格式:

  CREATE OR REPLACE TRIGGER trigger_name

    [BEFORE | AFTER]

              [ddl_event_list | database_event_list]

    ON [DATABASE | [schema]]

               [when_clause]

               tigger_body

例如

create or replace trigger droped_obj_trigger before drop on schema
begin
insert into droped_objects values(ora_dict_obj_name,ora_dict_obj_type,sysdate);
end;

启用和禁用触发器

  Oracle提供了ALTER TRIGGER语句用于启用和禁用触发器,语法格式:

  ALTER TRIGGER trigger_name DISABLE | ENABLE;

删除触发器

  drop trigger trigger_name

重新定义触发器

     重新定义:create or replace trigger trigger_name

标签:语句,tri,触发器,name,视图,trigger,oracle
From: https://www.cnblogs.com/xupengxiang/p/17834540.html

相关文章

  • KingbaseES启用和禁用触发器
    启用触发器您可以使用带有ENABLE选项的ALTERTRIGGER语句启用禁用状态的触发器。要在class表中启用名为class_trigger的触发器(禁用状态),输入以下语句:ALTERTRIGGERclass_triggerENABLE;上述用于启动特定的触发器,如果要启用特定表的所有触发器,请使用带有ENABLE......
  • oracle创建用户授权提示无权限解决方案
    流程如下:1.win+r输入cmd回车,打开命令行窗口,输入 sqlplus 用户名/密码assysdba以管理员身份连接数据库。    如:sqlplusscott/123456assysdba;2.创建用户并授权--创建用户createuser用户名identifiedby密码;--授予所有权限grantallprivilegesto......
  • 利用 kettle 对 oracle 实现字符串的脱敏和对称加密
    脱敏要求对身份证进行ASE加密处理对手机号只显示前三位和后四位其余使用****代替对于职业只显示前三个字对于真实姓名只显示展示一位即可kettle建立转换表输入表输出ASE加密选择组件密钥转换密钥必须是16进制且大于16个字节配置字段和加密算法......
  • oracle 查看SQL执行计划
    参考:https://blog.csdn.net/m0_71406734/article/details/130745657执行计划的目的了解SQL语句的执行方式,帮助开发人员和DBA分析SQL语句的性能瓶颈。查看SQL语句的执行效率,帮助开发人员和DBA优化SQL语句的性能。了解数据库的物理结构,如索引、表之间的连接方式等。帮助开发人......
  • oracle中insert用select方式插入慢的解决之一
    原理我没明白,但是可以解决插入过慢的问题。原SQLINSERT INTO LOGINSTATBYDEPTzsy(group_id, persons, loginTimes, loginPersons, datadate, TYPE)SELECT tg.id, p.persons, sum(lb.LOGINAMOUNT)sum1, count(DISTINCTtu.id)sum2, 1, 2FROM userdaylogini......
  • oracle查询表空间占用sql
    查询表空间占用SELECT tablespace_name"表空间名", 100"已使用空间(MB)", 0"剩余空间(MB)", 100"总的预分配空间(MB)", 100||'%'"已使用百分比", 0||'%'"剩余百分比"FROM ( SELECT tablespace_name FROM ......
  • Oracle启动数据库报ORA-01102解决办法
    1.机器启动之后登录服务器使用sqlplus/assysdba登录数据库发现数据库并没有启动之前把数据库服务添加过开机自启动![在这里插入图片描述](https://img-blog.csdnimg.cn/c25a5e40f3274621b708d974065bf650.png)2.使用startup命令启动数据库报错了SYS@orcl>startup;ORACLE例程已......
  • Oracle sql自定义统计月范围
     思路: 1,使用SUBSTR(to_char(INSPECTION_DATE,'yyyy-mm-dd'),-2)取出天数, 2,使用case……when……then……判断取出的天数是否大于等于25号,如果是则将日期设置成下月第一天 如果小于等于24号,则设置成当月第一天 3,使用TRUNC(ADD_MONTHS(INSPECTION_DATE,1),'mm')增......
  • Oracle DG 主从延时判定
    一、主从应用模式1、ADG与普通归档模式colnamefora50;setlines300;--SWITCHOVER_STATUS:SESSIONSACTIVEselectSWITCHOVER_STATUS,NAME,PROTECTION_MODE,OPEN_MODE,LOG_MODE,DATABASE_ROLE,DB_UNIQUE_NAMEfromv$database;--如果process:MRP0:WAIT_FOR_LOG则为ADG,如果......
  • 十二、触发器
    一、什么是触发器?触发器(trigger)是SQLserver提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数......