网站首页 > 技术文章 正文
Oracle DDL类型触发器
Oracle DDL类型触发器主要是对于Oracle数据库的DDL操作触发的触发器,主要包括create、drop、alter等DDL事件,经常利用DDL类型触发器记录DDL操作记录或者限定对某个对象进行DDL操作。也可以根据进行对应DDL操作做对应的操作。
Oracle DDL类型触发器的语法结构
DDL类型触发器的编写语法如下:
create [ or replace] trigger tr_name(触发器名) before|after ddl_event|database_event on SCHEMA(数据库对象)|DATABASE(数据库) [follows tr_name1(其它触发器名)] [when 条件] declare --声明部分 begin --触发器内容部分 end;
语法解析:
1、or replace :存在同名的触发器就覆盖保存。
2、trigger:创建触发器的关键词。
3、before|after表示是选择的触发器是在进行DDL操作之前触发还是之后触发。
4、ddl_event:表示的DDL事件,有create(创建)、alter(修改)、drop(删除)等常用DDL操作。
5、SCHEMA|DATABASE:表示触发器是作用在数据库对象上还是数据库上。
6、follows :表示触发器的顺序是跟在哪个之后。
7、when 表示触发器触发的附带条件,比如时间。
下面通过一个案例来解析Oracle DDL类型触发器的写法:
案例1、利用Oracle DDL类型触发器给学生信息表(stuinfo)做一个禁止删除、修改表结构的触发器,代码如下:
create or replace trigger tr_stuinfo_ddl before alter or drop on schema begin --禁止对学生信息表进行删除和修改操作 if dictionary_obj_name = 'STUINFO' THEN --修改表结构 if sysevent = 'ALTER' then --抛出错误 raise_application_error(-20001, '禁止学生信息表stuinfo进行alter操作!'); end if; --删除表结构 if sysevent = 'DROP' then --抛出错误 raise_application_error(-20001, '禁止学生信息表stuinfo进行drop操作!'); end if; END IF; end;
执行完案例1触发器,我们通过修改学生信息表(stuinfo)测试一下触发器的效果,代码如下:
--修改表结构 alter table STUINFO modify stuaddress VARCHAR2(200); --删除表结构 drop table stuinfo;
结果如下:
案例2、利用DDL类型触发器的创建一个数据库级别的触发器,记录用户登录数据库的记录信息。再次我们需要设计一个登录记录表,来保存用户登录信息,代码如下:
-- Create table create table LOGIN_LOG ( logid VARCHAR2(20), loginuser VARCHAR2(100), logindate DATE ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Add comments to the table comment on table LOGIN_LOG is '登录日志表'; -- Add comments to the columns comment on column LOGIN_LOG.logid is '日志id'; comment on column LOGIN_LOG.loginuser is '登录用户名'; comment on column LOGIN_LOG.logindate is '登入时间';
建立DDL类型触发器(数据库级):
create or replace trigger tr_stuinfo_ddl_login after logon--数据库系统事件 on database begin --插入登录日志表 insert into login_log (LOGID, LOGINUSER, LOGINDATE) values (pk_oplog_id.nextval,sys.login_user, sysdate); end;
建立好案例2触发器,我们通过登录数据库,然后查看下登录日志表,查看一下效果,结果如下:
猜你喜欢
- 2024-10-13 通过触发器截取插入Oracle的数据长度
- 2024-10-13 ORACLE 19C 触发器自动打开PDB oracle 触发器执行出错
- 2024-10-13 干货 oracle sql 存储过程、触发器、方法
- 2024-10-13 Oracle数据库面试题汇总 oracle数据库面试题基础知识
- 2024-10-13 Oracle数据库知识 day02 索引&pl/sql语法&存储过程&触发器
- 2024-10-13 Oracle笔试题库 附参考答案 oracle笔试题目及答案
- 2024-10-13 Oracle 创建表的序列和触发器 oracle给表添加触发器
- 2024-10-13 分享一个实用的触发器--限制Oracle用户登录IP地址
- 2024-10-13 利用Oracle触发器实现不同数据库之间的数据同步
- 2024-10-13 Oracle触发器的简单例子 oracle中触发器分为哪几种
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 566℃几个Oracle空值处理函数 oracle处理null值的函数
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)