首页
关于
友链
Search
1
wlop 4K 壁纸 4k8k 动态 壁纸
1,472 阅读
2
Nacos持久化MySQL问题-解决方案
933 阅读
3
Docker搭建Typecho博客
753 阅读
4
滑动时间窗口算法
730 阅读
5
Nginx反向代理微服务配置
701 阅读
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
登录
Search
标签搜索
java
javase
docker
java8
springboot
thread
spring
分布式
mysql
锁
linux
redis
源码
typecho
centos
git
map
RabbitMQ
lambda
stream
少年
累计撰写
189
篇文章
累计收到
24
条评论
首页
栏目
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
页面
关于
友链
搜索到
1
篇与
的结果
2022-12-07
Oracle 触发器
Oracle 触发器具备某些条件,由数据库自动执行的一些DML 操作行为。一、语句触发器语句触发器针对整个表,作用整个表操作。一般用于权限判断之类的。常用行触发器。语法结构Create trigger 触发器名称 Before/after 触发动作 On 作用对象触发器谓词:INSERTING、UPDATING、DELETING示例1:向t_book插入数据之前判断,用户是否有权限执行查询操作。创建语句触发器:create trigger tr_book before insert on t_book begin if user!='hello' then raise_application_error(-20001,'权限不足'); end if; end;执行插入数据:insert into t_book values(6,'ooo',2,68,'男');提示结果:修改触发器:create or replace trigger tr_book before insert on t_book begin if user!='SCOTT' then raise_application_error(-20001,'权限不足'); end if; end;重新执行插入数据即可插入。insert into t_book values(6,'ooo',2,68,'男');查询结果:注意:多个可以用or连接示例:create or replace trigger tr_book before insert or update or delete on t_book begin if user!='hello' then raise_application_error(-20001,'权限不足'); end if; end; before insert or update or delete:插入、修改、删除之前判断是否有权限。进行插入、修改、删除操作:insert into t_book values(7,'occcc',2,88,'男'); delete from t_book where id=1; update t_book set price=89 where id=1;此时都提示:示例2:在对t_book增删改之后记录日志到t_book_log表中。编写行触发器:create or replace trigger tr_book_log after insert or update or delete on t_book begin if inserting then insert into t_book_log values(user, 'insert', sysdate); else if updating then insert into t_book_log values(user, 'upate', sysdate); else if deleting then insert into t_book_log values(user, 'delete', sysdate); end if; end if; end if; end;分别执行增删改操作:insert into t_book values(8,'866',2,88,'男'); delete from t_book where id=8; update t_book set price=88 where id=1;此时t_book_log表中已经有记录了。select * from t_book_log;查询结果:注意:判断增删改用的不是insert、delte、update,而是inserting、updating、deleting。二、行触发器行触发器针对行记录。一般用于记录操作日志。语法结构Create trigger 触发器名称 Before/after 触发动作 For each row On 作用对象只是语句触发器多了一个For each row示例1:当修改t_book增加一条数据时,t_booktype对应的类型名称就改为t_book中新增的书名作为类型名。为插入数据前t_book\t_booktype表数据:编写行触发器:create or replace trigger tr_bookandtype after insert on t_book for each row begin update t_booktype set booktypename=:new.bookname where id=:new.type_id; end;注意:触发器内置变量:old 表示旧行记录。:new 表示新插入行记录。执行插入操作:insert into t_book values(8,'新增sql秘籍',2,55,'男');重新查看2表数据:可以看到,新增数据行8后,对应的typeid=2的类型名称改为书名了。示例2:当删除t_book一条数据后,将t_booktype中对应类型名称,改为被删除t_book记录中书名。create or replace trigger tr_bookdeltype after delete on t_book for each row begin update t_booktype set booktypename=:old.bookname where id=:old.type_id; end;注意:记录被删除了,所以可以用内置对象old.字段,获取删除记录的字段信息。t_book、t_booktype表原始数据:删除操作:delete from t_book where id=7;查看删除后t_book、t_booktype表数据:t_book中id=7记录已被删除。t_booktype中typename=www了。注意:一般行触发器用的较多。三、触发器禁用和开启禁用触发器alter trigger 触发器名称 disable启用触发器alter trigger 触发器名称 enable四、删除触发器drop trigger 触发器名称;五、修改触发器修改和其它修改视图、触发器、存储过程一样。create or replace只需要加上or replace
2022年12月07日
213 阅读
0 评论
2 点赞