ORACLE触发器
来源:互联网 发布:ads 差分端口 仿真 编辑:程序博客网 时间:2024/06/11 21:41
概念: 触发器是当特定事件出现时自动执行的存储过程 特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用 触发器的功能: 自动生成数据 自定义复杂的安全权限 提供审计和日志记录 启用复杂的业务逻辑 触发器由三部分组成: 触发器语句(事件) 定义激活触发器的 DML 事件和 DDL 事件 触发器限制 执行触发器的条件,该条件必须为真才能激活触发器 触发器操作(主体) 包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行 要点: /* new与old对象说明 insert:只有new对象 delete:只有old对象 update:new和old对象都有 DML 行级触发器:拥有old和new对象 语句级触发器:没有new和old对象,因为语句级操作针对一次操作,无法获得任意记录。 ------------------------------------------------------------------ 行级触发器要点:1.new和old对象,2.谓语动词“inserting,deleting,updating”的使用 语句级触发器要点:1.没有new和old对象。2.没有for each row instead of 触发器要点:1.不管有没有加for each row 都是行级类别 概念: 触发器是当特定事件出现时自动执行的存储过程 特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用 触发器的功能: 自动生成数据 自定义复杂的安全权限 提供审计和日志记录 启用复杂的业务逻辑 触发器由三部分组成: 触发器语句(事件) 定义激活触发器的 DML 事件和 DDL 事件 触发器限制 执行触发器的条件,该条件必须为真才能激活触发器 触发器操作(主体) 包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行 要点: /* new与old对象说明 insert:只有new对象 delete:只有old对象 update:new和old对象都有 DML 行级触发器:拥有old和new对象 语句级触发器:没有new和old对象,因为语句级操作针对一次操作,无法获得任意记录。 ------------------------------------------------------------------ 行级触发器要点:1.new和old对象,2.谓语动词“inserting,deleting,updating”的使用 语句级触发器要点:1.没有new和old对象。2.没有for each row instead of 触发器要点:1.不管有没有加for each row 都是行级类别 create or replace trigger role_tri before insert or update or delete on role for each row when (new.roleid>4) declare role_name varchar2(20); begin role_name:=:new.rolename; dbms_output.put_line(role_name); insert into roletest(roletestid,roletestname) values(:new.roleid,:new.rolename); end; insert into role(roleid,rolename) values(seq_role.nextval,'经理'); commit; create or replace trigger role_tri before insert or updateor delete on rolefor each rowwhen (new.roleid>4)declarerole_name varchar2(20);begin role_name:=:new.rolename; dbms_output.put_line(role_name); insert into roletest(roletestid,roletestname) values(:new.roleid,:new.rolename);end;insert into role(roleid,rolename) values(seq_role.nextval,'经理');commit;行级触发器 Sql代码 create or replace trigger role2_tri before insert or update or delete on role for each row begin if inserting then select seq_role.nextval into :new.roleid from dual; dbms_output.put_line('--role2---select----'); elsif updating then dbms_output.put_line('不许更新'); raise_application_error(-20020,'不准更新'); elsif deleting then dbms_output.put_line('deleting'); end if; end; insert into role(roleid,rolename) values(seq_role.nextval,'经理'); commit; update role set rolename='CEO' where roleid=76; commit; create or replace trigger role2_tri before insert or update or delete on rolefor each rowbegin if inserting then select seq_role.nextval into :new.roleid from dual; dbms_output.put_line('--role2---select----'); elsif updating then dbms_output.put_line('不许更新'); raise_application_error(-20020,'不准更新'); elsif deleting then dbms_output.put_line('deleting'); end if;end;insert into role(roleid,rolename) values(seq_role.nextval,'经理');commit;update role set rolename='CEO' where roleid=76;commit;语句级触发器 Sql代码 create or replace trigger role3_tri before update or delete on role begin --无法获得没有new和old对象 insert into roletest(roletestid,roletestname) values(75,'经理'); end; update role set rolename='CEO' where roleid=76; commit; create or replace trigger role3_tri before update or delete on rolebegin --无法获得没有new和old对象 insert into roletest(roletestid,roletestname) values(75,'经理');end;update role set rolename='CEO' where roleid=76;commit;instead of 触发器==只能针对视图 Sql代码 create or replace view my_view as select t.suser,t.name,t.sex,t.email from t_user t,user_role r where t.suser = r.suser create or replace trigger my_tri instead of insert or update or delete on my_view for each row --不管有没有这句,都是行级 begin if inserting then dbms_output.put_line(:new.name); elsif updating then dbms_output.put_line('--old--'||:old.name||'--new--'||:new.name); elsif deleting then dbms_output.put_line(:old.name); end if; end; update my_view t set t.name='dddd' where t.suser='test9'; commit;
- oracle 触发器
- Oracle触发器
- Oracle触发器
- oracle触发器
- ORACLE触发器
- oracle触发器
- Oracle 触发器
- oracle触发器
- Oracle触发器
- Oracle 触发器
- Oracle 触发器
- Oracle 触发器
- oracle触发器
- oracle 触发器
- Oracle触发器
- oracle触发器
- ORACLE触发器
- ORACLE 触发器
- hdu 1207 汉诺塔II
- opencv 轮廓的凸包,凸缺陷
- ubuntu 终端配色方案
- 区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets
- 实战 PureMVC
- ORACLE触发器
- MySQL索引背后的数据结构及算法原理
- 有趣的 JavaScript 代码片段
- 切换IP地址的小工具
- 学习批处理命令——添加“显示|不显示 隐藏文件”右键菜单
- QT helloWord 程序
- http://blog.sina.com.cn/s/blog_8820018a0100w7t7.html
- wchar_t *str转换为CString 类型---VC新手学习
- BNF范式和EBNF范式