第7节Oracle10g数据库管理系统.ppt

  1. 1、本文档共142页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
创建触发器 创建触发器的一般语法是: CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE [OF column [, column …]]} ON [schema.] table_name [FOR EACH ROW ] trigger_body; 触发器触发次序 执行 BEFORE语句级触发器; 对与受语句影响的每一行: 执行 BEFORE行级触发器 执行 DML语句 执行 AFTER行级触发器? 执行 AFTER语句级触发器 创建DML触发器 触发器名与过程名和包的名字不一样,它是单独的名字空间,因而触发器名可以和表或过程有相同的名字,但在一个模式中触发器名不能相同。 DML触发器的限制 CREATE TRIGGER语句文本的字符长度不能超过32KB; 触发器体内的SELECT 语句只能为SELECT … INTO …结构,或者为定义游标所使用的SELECT 语句。 触发器中不能使用数据库事务控制语句 COMMIT; ROLLBACK, SVAEPOINT 语句; 由触发器所调用的过程或函数也不能使用数据库事务控制语句; 触发器中不能使用LONG, LONG RAW 类型; 触发器内可以参照LOB 类型列的列值,但不能通过 :NEW 修改LOB列中的数据; :NEW 和 :OLD 问题:当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、 后列的值。 实现: :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 实例 CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1=2; CREATE OR REPLACE TRIGGER del_emp BEFORE DELETE ON scott.emp FOR EACH ROW BEGIN -- 将修改前数据插入到日志记录表 del_emp ,以供监督使用。 INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate ) VALUES( :old.deptno, :old.empno, :old.ename , :old.job, :old.mgr, :old.sal, :m, :old.hiredate ); END; DELETE emp WHERE empno=7788; DROP TABLE emp_his; DROP TRIGGER del_emp; 创建替代(INSTEAD OF)触发器 创建触发器的一般语法是: CREATE [OR REPLACE] TRIGGER trigger_name INSTEAD OF {INSERT | DELETE | UPDATE [OF column [, column …]]} ON [schema.] view_name [FOR EACH ROW ] trigger_body; 删除触发器 删除触发器语法: DROP TRIGGER trigger_name; 当删除其他用户模式中的触发器名称,需要具有DROP ANY TRIGGER系统权限,当删除建立在数据库上的触发器时,用户需要具有ADMINISTER DATABASE TRIGGER系统权限。 使能触发器 数据库TRIGGER 的状态: 有效状态(ENABLE):当触发事件发生时,处于有效状态的数据库触发器TRIGGER 将被触发。 无效状态(DISABLE):当触发事件发生时,处于无效状态的数据库触发器TRIGGER 将不会被触发,此时就跟没有这个数据库触发器(TRIGGER) 一样。 语法: ALTER TRIGGER trigger_name [DISABLE | ENABLE ]; 例:ALTER TRIGGER emp_view_delete DISABLE; * * * * * * * * * 函数的调用 实例 DECLARE V_num NUMBER; V_sum NUMBER; BEGIN V_sum :=get_salary(30, v_num); DBMS_OUTPUT.PUT_LINE(30号部门工资总和:||v_sum||,人数:||v_num); END; 运行结果: 30号部门工资总和:9400,人数:6 创建过程 创建过程语法 : CREATE [OR REPLACE] PROCEDURE Procedure_na

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档