包包package是一个可以将相关对象存储在一课件.ppt

上传人:小飞机 文档编号:3997986 上传时间:2023-03-30 格式:PPT 页数:38 大小:1.64MB
返回 下载 相关 举报
包包package是一个可以将相关对象存储在一课件.ppt_第1页
第1页 / 共38页
包包package是一个可以将相关对象存储在一课件.ppt_第2页
第2页 / 共38页
包包package是一个可以将相关对象存储在一课件.ppt_第3页
第3页 / 共38页
包包package是一个可以将相关对象存储在一课件.ppt_第4页
第4页 / 共38页
包包package是一个可以将相关对象存储在一课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《包包package是一个可以将相关对象存储在一课件.ppt》由会员分享,可在线阅读,更多相关《包包package是一个可以将相关对象存储在一课件.ppt(38页珍藏版)》请在三一办公上搜索。

1、第三章:包 包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件-包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。,1包的组成 将相关的若干程序结构组织到一块,用一个包来标识这个集合。程序单元 描述_ 过程(procedure)带有参数的程序函数(Function)带有参数的程序,该程序只返回一个 值变量(Variable)用于存储变化值的存储单元游标(Cur

2、sor)指向一个 SQL语句的指针常量(Constant)指向常数的指针异常情况(Exception)标志一个异常情况,包说明是操作接口,对应用可见;包主体是黑盒,对应用隐藏实现细节,包由说明部分和包主体两部分组成,在包的说明部分说明的元素(过程、函数等)是公共元素,只在包主体中说明的元素是私有元素。元素的性质 描 述 在包中的位置公共的(public)在整个应用的全过 包的说明部分说明,程均有效 并在包主体中具体定 义它私有的(private)对包以外的过程和 在包主体部分说明 函数是不可见的 和定义局部的 只在一个过程或函 在所属过程或函数的 数内部可用 内部说明和定义,注释:程序(过程、

3、函数)可以是公共的或私有的。标识符(变量、游标、常量、异常处理)可以是公共、私有或局部的。在包说明部分说明的所有对象在包的外面都是可用的并且是可见的。只需指定该包的名字就可以访问该对象了。,2开发包 按下述步骤开发一个包,注意这和过程的开发相似。在一个文本文件中写入 CREATE PACKAGE 语句 以说明一个包。用 CREATE PACKAGE BODY语句创建包体。在 SQL*plus或 SVRMGR中运行这两个文本文件,以将包的源代码编译成编译代码(P-Code),并将这 两种代码存人数据库中。从ORACLE环境,或者从一个独立的函数或过程调 用一个包内的公共元素。,注释:也可将 CR

4、EATE PACKAGE语句和 CREATE PACKAGE BODY语句 写入同一个文本文件中。,创建包说明的语法:CREATE OR REPLACE PACKAGE 模式名.包名 IS|AS PL/SQL块 包说明例1:CREATE OR REPLACE PACKAGE emp_actions AS PROCEDURE hire_employee(ename CHAR.);PROCEDURE fire_employee(emp_id NUMBER.);FUNCTION END emp_actions;/,例2:制作一个包说明 生成一个管理雇员薪水的包,其中包括一个为雇员加薪的过程,并且在包

5、中还有一个记录所有雇员薪水增量的全局变量。,创建包主体的语法:CREATE OR REPLACE PACKAGE BODY 模式名.包名IS|AS PL/SQL包说明,例:CREATE OR REPLACE PACKAGE BODY emp_actionsAS PROCEDURE hire_employee(ename CHAR.)BEGIN 过程语句 END hire_employee;PROCEDURE fire_employee(emp_id NUMBER.)BEGIN 过程语句 END hire_employee;END emp_actions;/,在创建公共过程时使用私有过程可以使代

6、码模块化和清晰化。可以在包主体的开始定义一个私有过程,以初始化所有全局变量。例子:制作一个包体。创建一个私有函数以简化过程 RAISE_SAL的代码,同时创建一个用来初始化全局变量 V_DELTA_SAL的过程。,CREATE PACKAGE BODY sal_paCkage IS FUNCTION get_sal(v_empno emp.empno%type)Return number Is V_empsal emp.sal%type:=0;Begin Select sal Into v_empsal From emp Where empno=v_empno;Return(v_empsal)

7、;End;,PROCEDURE raise_sal(v_empno emp.empno TYPE,v_sal_increment emp.salTYPE)IS v_old_sal emp.sal TYPE;BEGIN v_old_sal:=get_sal(v_empno);UPDATE emp SET sal=sal十v_sal_increment WHERE empno=v_empno;COMMIT WORK;v_delta_sal:=v_delta_sal十v_sal_incrernent;END raise_sal;END sal_package;/,注释:包中 NUMBER型变量缺省初

8、始化值为0,VARCHAR2型变量缺省初始化值为空。注意:包说明部分是必需的,而包主体部分是可选的。过程和函数的说明在包说明和包主体部分应该是 相同的。包括过程、函数的名字、参数的名字以 及参数的模式。,3包的管理包的存储和一个单独的过程存储一样。内 容 命令创建一个新的包说明信息 CREATE PACKAGE创建一个新的包主体 CREATE PACKAGE BODY修改一个已有的包的说明 CREATE OR REPLACE PACKAGE修改一个已有的包主体 CREATE OR REPLACE PACKAGE BODY删除包的说明和包主体 DROP PACKAGE删除包主体 DROP PAC

9、KAGE BODY,注释:当包的说明被删除或修改时,一般要求把包主体也 删除或做相应修改。当删除或修改包主体时,可以不删除或修改包的说 明。在管理包时,整个包(包括其中所有的元素)是作为一个逻辑单元进行管理的,其管理命令和方法都与管理单个过程相同。,任务 包 独立过程文档记录 在数据字典视图 在数据字典视图 USER_SOURCE中 USER_SOURCE中检查编译错误 在数据字典视图 在数据字典视图 USER_ERRORS中 USER_ERRORS中开发方法 利用 SQL*Plus 利用 SQL*Plus批文件 批文件开发权限 需要 CREATE 需要 CREATE PROCEDURE PR

10、OCEDURE 系统权限 系统权限使用权限 需要对包有EXECUTE 需要对过程有EXECUTE 实体特权 实体特权,注释:用 DBMS_OUTPUT系统包中的过程来调试包中的过程。,4包的调用 从另一个存储子程序调用 emp_actions.hire_employee(name);从ORACLE工具中调用 SQL EXECUTE emp_actions.hire_employ();远程存取:包名.过程名 DB链路名,例子:调用一个公共过程。给7654号雇员加薪$100。,注释:利用包名可以使一个用户的两个不同过程有相同的 名字。在一个用户对话中可以从任何独立过程中引用包中的公 共变量、游标、

11、常量和异常情况。,例子:调用包中的变量。当某部门整个薪水的变化超过予算 的,发一条警告信息。,注释:引用包中的变量时,在它前面加上包的名字。,5包的依赖性 与独立过程一样,尽管包也有自动管理本地依赖性和远程依赖性的机制,但仍建议用户对那些无效的包进行手动地重新编译。,任务 包 独立过程记录文档 在数据字典的 在数据字典的 DEPENDENCIES DEPENDENCIES 视图里 视图里手动重新编译 用 ALTER PACKAGE 用 ALTER 命令 PROCEDURE命令自动重新编译 取决地本地、远程依 取决于本地、远程依 赖性的自动管理机制 赖的自动管理机制,语法重新编译包体和包说明的定

12、义,语法重新编译包体,其中:package name 指包的名字,注释:当重新编译包说明的定义时,必须对包体重新编译。当只重新编译包体时,不一定要重编译包说明的定义。,在独立过程中使用包中的元素 如果只改变包主体的定义,而不改变包的说明的定义,那么不影响包主体外的独立过程的有效性。,如果改变对包主体说明的定义,则包主体和包外的过程都将是无效的,因为它们都依赖于对包主体说明的定义。,在包中涉及到一个独立过程 如果该独立过程改变了,那么包主体将会无效,但包的说明定义仍然有效。,包的依赖性的自动管理机制 当包的定义发生改变以后,ORACLE 把所有调用该包的其他包的状态置为无效。当用户调用的包的状态

13、发生遗失时,ORACLE将发生一个运行错误。当包被再次调用时,ORACLE再次说明该包,并初试化变量和游标。,6包的优点 包除了能规范化应用开发程序以外,还有以下优点:方便对存储过程和函数的组织 将相关的过程和函数组织在一起。在一个用户的环境中解决命名的冲突问题。,方便对存储过程和函数的管理 在不改变包的说明定义时可以改变包体的定 义。限制过程依赖性。方便了对存储过程和函数的安全性管理 整个包的访问权限只需一次性授权。区分共用过程和私有过程。,为用户对话提供状态确认信息 在各种环境和过程中均可引用标识符。在用户的整个对话中保留标识符的状态。改善性能 在包被首次调用时,作为一个整体全部调入内存。减少多次调用时的磁盘 IO次数。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号