设为首页 收藏本站
查看: 780|回复: 0

[经验分享] oracle触发器基础

[复制链接]

尚未签到

发表于 2016-7-20 09:55:30 | 显示全部楼层 |阅读模式
  基础书籍中记录下来的。

--1、语句触发器
create or replace trigger tr_insert_test1
before insert
on test1
begin
if user!='admin' then
raise_application_error(-20001,'权限不足,不能向数据表中插入数据1');
end if;
end;
--多个激活动作
create or replace trigger tr_insert_test2
before insert or update or delete
on test1
begin
if user!='KELY' then--区分大小写,统一大写
raise_application_error(-20001,'权限不足,不能向数据表中插入数据2');
end if;
end;
--触发器谓词:INSERTING、UPDATING、DELETING(类型布尔值)
--记录数据库表操作日志,使用触发器
create table t_log(
u_name varchar2(20),
action varchar2(50),
log_time date default sysdate
);
create or replace trigger tr_table_log
after insert or update or delete
on test1
begin
if inserting then
insert into t_log(u_name,action) values(user,'insert');
end if;
if updating then
insert into t_log(u_name,action) values(user,'update');
end if;
if deleting then
insert into t_log(u_name,action) values(user,'delete');
end if;
end;
--禁用表的权限校验触发器
alter trigger tr_table_log enable;--disable/enable
--总结:作用级别为表(不支持视图before/after insert和表before/after select),
--     无论触发动作影响到多少记录都执行一次触发器
--2、行触发器
insert      update     delete
:old   不可用       可用        可用   
:new    可用        可用       不可用
--实例
create or replace trigger tr_test1_history
before update or delete
on test1
for each row --行触发器的标志
begin
insert into test1_history values(:old.tid,:old.tname,:old.tage,:old.remark);
end;
--变量引用于referencing
create or replace trigger tri_test1_insert
before insert
on test1
referencing new as new_value
for each row
begin
declare max_id number;
begin
select max(tid) into max_id from test1;
:new_value.tid := max_id+1;
end;
end;
--触发器的条件限制
--3、instead of触发器(视图)
--4、系统事件与用户事件触发器
--系统事件触发器
--after startup/before shutdown(系统事件) on database
--用户事件触发器
-- on system.schema:指定触发器的作用对象为用户system的所有对象(表名)
--5、触发器相关操作
--禁用/启用触发器:disable(alter trigger tr_name disable/enable)
--数据字典中查看触发器:user_objects/user_triggers

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-246723-1-1.html 上篇帖子: Oracle批量导出存储过程 下篇帖子: oracle用户、权限分配
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表