ZTESOracle创建包和触发器十五讲.pptVIP

  • 3
  • 0
  • 约3.94千字
  • 约 28页
  • 2017-05-28 发布于上海
  • 举报
ZTESOracle创建包和触发器十五讲ppt课件

创建包和触发器 目标 在本课中您将学会以下内容: 创建包 使用包 触发器的用途 创建各种类型的触发器 触发器的使用限制 INSTEAD-OF触发器 包 存储在服务器端的程序库 包含: 全局变量的声明 游标的定义 过程 函数 包分为:系统内置的包和用户自定义的包 Oracle提供的内置包 DBMS_ALERT DBMS_LOCK DBMS_SESSION DBMS_OUTPUT HTP UTL_FILE UTL_MAIL DBMS_SCHEDULER 包和库的区别 库必须要显式地链接到应用程序中去,而包是随时可以被调用的 库总是运行在客户端 包总是运行在服务器端 包的组成 定义部分: 用于声明所有的公共变量,游标,过程和函数 包体部分: 过程和函数的代码 基本原理: 定义部分对用户是可见的,说明如何使用包 包体部分是不可见的,用户不会关心具体的代码 包的组成 包说明 包体 过程、函数声明 变量 过程A主题定义 BEGIN … END; 过程B主体定义 变量 变量 Public Private 包的创建与执行过程 spec.sql 1 2 3 编辑 载入 创建 (编译和存数) 执行 使用 SHOW ERRORS 调试错误 4 body.sql 主体 说明 在SQL*Plus中创建包的定义 CREATE OR REPLACE PACKAGE package_name IS --public variables variable_name datatype; --program units PROCEDURE procedure_name (parameter_list); FUNCTION function_name (parameter_list); END; CREATE OR REPLACE PACKAGE BODY package_name IS private variable declarations program unit blocks END; 创建包规范 创建包体 在SQL*Plus中创建包的定义 在SQL*Plus中创建包 调用包中的程序单元 在过程名前加上其所在的包和名称 例如: PACKAGE_NAME.program_unit_name(parameter_list); DBMS_OUTPUT.PUT_LINE(‘Hello World’); 程序的重载 重载 多个程序单元具有相同的名称,但接收不同数据和类型的参数 允许用户使用相同的命令,通过提供不同的参数,完成不同的调用请求 数据库触发器 触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,存储过程是由用户或应用程序显示调用的。而触发器不能直接调用。 触发器的分类: DML触发器 语义级触发器 行级触发器 INSTEAD OF 触发器 用户事件触发器 系统条件触发器 触发器的用途 确保相关的操作同时完成: 卖出一件商品,修改其库存 创建类似于审计用的表记录: 记录是谁修改了学生的等级以及什么时候作的修改 创建数据库DML触发器 代码类似于PL/SQL程序块 数据库触发器不能接受参数 定义触发器,必须指明: 触发器触发的事件语句 INSERT,UPDATE,DELETE 触发时机 事前触发还是事后触发 触发等级 语句级还是行级 触发器的时序 事前触发:触发器代码在语句执行前先执行 例如:对于审计信息,在信息被修改之前先把它记录下来 事后触发:触发器代码在语句执行后才执行 例如:在商品卖出后再修改其库存 触发器的级别 行级触发器:对于语句所涉及到的每一行都执行触发器代码 例如:对于每一件卖出的商品(一件商品对应表中的一行)都要修改其库存 语句级触发器:不管语句涉及到多少行,触发器代码只执行一次 例如:对于审计信息,只关心是谁修改了表中的数据,而不关心他修改了多少数据 创建触发器 CREATE OR REPLACE TRIGGER trigger_name [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON table_name [FOR EACH ROW] [WHEN (condition)] BEGIN trigger body END; 默认是语义级 相关限制 只能在自己创建的表上创建触发器 必须具有CREATE TRIGGER系统权限 不能在触发器中使用COMMIT语句 行级触发器的语法 WHEN (条件表达式): 是可选的 指明符合触发器执行的行所需要满足的条件 引用域的旧值和新值: :OLD.字段名 :NEW.字段名 INSTEAD-OF触发器 正常情况下,用户不能向多表连接的复杂视图中插入数据,也不能修改或删除这类视图中的数据 当用户发出一个基于复杂

文档评论(0)

1亿VIP精品文档

相关文档