Oracle PlSql包(package)
- 格式:doc
- 大小:154.50 KB
- 文档页数:17
PLSQL报表开发步骤1.PLSQL创建package1.1在PL/SQL Developer中创建一个package。
➢此时会生成一个和包体。
➢部分定义一个过程:➢包体部分定义具体的格式控制及输出数据。
➢在print函数中进行输出(输出到控制台和报表)。
➢cursor的定义放在包体的最前面。
➢main函数为该函数的入口地址。
入口函数的特点为:前两个的定义必须为errbuf out varchar2,retcode out number,否则报错。
使用 errbuf 返回任何错误消息和retcode 返回完成状态。
参数 retcode 返回 0 表示成功、警告,成功为 1 和 2 的错误。
在并行程序运行后,并发管理器会将 errbuf 和 retcode 的容写入与您的并发请求相关联的日志文件。
➢屏蔽不在包体外调用的函数声明。
➢创建的package可不必上传到应用。
在数据库中编译后即可。
参考文件:plsql形式报表开发及html输出格式.pdf参考代码:Rz_Gl_Period_Charge_Pkg最后.pck(在PLSQL中打开)2.定义并发可执行➢在EBS中注册挂载:登录oracle EBS R12系统。
选择应用开发员--》并发--》可执行。
➢填入如下信息。
3.定义并发程序应用开发员--》并发--》程序参数设置:Notes:关于值集的定义,参见附件。
Parameter顺序、名称与 Procedure 参数一致(Errbuf 与 Retcode 不用设定) 4.添加并发程序到请求组4.1 请求组分配给责任,责任分配给用户。
首先要查找职责和请求组➢查找职责:系统管理员》安全性》职责》定义➢查找请求组:如果没有自己的请求组,可以自己新建一个。
切换责任到系统管理员 >安全性>责任>请求,系统管理员》安全性》职责》请求➢提交请求,查看结果。
切换到相应的职责,本例中为R_GL_总账超级用户,提交一个新的请求,在请求的名称中找到创建的程序。
oracle select package method在Oracle数据库中,包(package)是一种将相关的过程、函数、变量、常量、游标和异常等组织到一起的数据库对象。
通过包,你可以将相关的逻辑分组到一起,使得代码更加整洁、易于管理和维护。
要选择一个包中的方法(通常是过程或函数),你需要知道包的名称以及你想要调用的方法的名称。
下面是一个基本的示例,展示了如何从一个包中选择(即调用)一个方法:首先,你需要有一个包。
例如,下面是一个简单的包定义:sqlCREATE OR REPLACE PACKAGE my_package AS-- 常量定义CONSTANT_VALUE CONSTANT VARCHAR2(50) := 'Hello, World!';-- 类型定义TYPE my_type IS TABLE OF VARCHAR2(50);-- 过程定义PROCEDURE my_procedure(p_param IN VARCHAR2);-- 函数定义FUNCTION my_function(p_param IN VARCHAR2) RETURN VARCHAR2; END my_package;/CREATE OR REPLACE PACKAGE BODY my_package AS-- 过程实现PROCEDURE my_procedure(p_param IN VARCHAR2) ISBEGINDBMS_OUTPUT.PUT_LINE('Procedure called with parameter: ' || p_param);END my_procedure;-- 函数实现FUNCTION my_function(p_param IN VARCHAR2) RETURN VARCHAR2 IS BEGINRETURN 'Function called with parameter: ' || p_param;END my_function;END my_package;/然后,你可以从另一个PL/SQL块或SQL查询中调用这个包的方法。
plsql安装教程
要安装PL/SQL,您可以按照以下步骤进行操作:
1. 首先,确定您的计算机上已经安装了适当的Oracle数据库
软件。
PL/SQL是Oracle数据库的一部分,因此您需要确保已
经正确安装和配置了Oracle数据库。
2. 下载适用于您计算机操作系统的Oracle数据库软件安装包。
您可以从Oracle官方网站下载最新的数据库软件版本。
3. 打开安装包,并按照向导的指示进行安装。
在安装过程中,您需要选择安装的组件。
确保选择安装PL/SQL开发工具。
4. 完成安装后,启动PL/SQL开发工具。
您可以在开始菜单或
桌面上找到相应的程序图标。
5. 在PL/SQL开发工具中,您需要配置数据库连接信息。
输入
数据库的主机名、端口号、用户名和密码。
如果您默认使用本地数据库,则主机名可以是"localhost"或"127.0.0.1"。
6. 连接到数据库后,您可以开始编写和执行PL/SQL代码了。
在PL/SQL开发工具的编辑器中,编写您的代码并保存。
7. 要执行PL/SQL代码,您可以使用开发工具的执行命令。
选
择要执行的代码块,并使用相应的快捷键或菜单选项执行代码。
以上就是安装PL/SQL的基本步骤。
根据您的操作系统和数据
库版本,可能会有一些细微的差别。
请确保参考适用于您情况的官方文档和安装指南以获得更详细的说明。
SQL\*Plus 是 Oracle 数据库系统中用于执行 SQL 语句和存储过程的命令行工具。
在SQL\*Plus 中编译package 语句是非常常见的操作,本文将介绍如何在 SQL\*Plus 中编译 package 语句。
编译 package 语句的基本步骤如下:1. 连接到数据库首先需要使用 SQL\*Plus 命令行工具连接到数据库。
可以使用以下命令进行连接:```sqlplus username/passwordhost:port/servicename```其中,username 是数据库用户名,password 是密码,host 是数据库主机名,port 是数据库端口号,servicename 是数据库服务名。
连接成功后,会出现SQL\*Plus 的提示符,表示已经成功连接到数据库。
2. 编写 package 语句在 SQL\*Plus 中,可以使用任意文本编辑器编写 package 语句。
可以使用 vi 或 Notepad++ 等编辑器编写 package 语句。
package 语句通常包括 package 头和 package 主体两部分,可以分别编写并保存到文件中。
3. 载入 package 文件在 SQL\*Plus 中使用以下命令载入 package 文件:```package_file_name.sql```其中,package_file_name.sql 是 package 文件的文件名。
载入成功后,SQL\*Plus 会显示已经载入的文件名,并提示已经成功加载package 文件。
4. 编译 package 语句一旦 package 文件被载入到 SQL\*Plus 中,可以使用以下命令编译package 语句:```ALTER PACKAGE package_name COMPILE;```其中,package_name 是 package 文件中定义的 package 名称。
一、介绍Oracle Package是Oracle数据库中存储过程和函数的一种封装方式,它可以将一系列逻辑相关的存储过程和函数放在一起,方便管理和调用。
在实际开发中,经常会遇到在已有的Oracle Package中新增方法的需求,本文将介绍在Oracle Package中新增方法的实现方法。
二、方法一1. 确定新增方法的名称及参数列表在新增方法之前,首先需要确定新增方法的名称以及参数列表。
通过分析业务需求和数据库表结构,确定新增方法的功能及所需参数。
2. 编写新增方法的实现代码在确定新增方法的名称及参数列表之后,便可开始编写新增方法的实现代码。
通过使用PL/SQL语言,可以在Oracle Package中新增方法的实现代码。
3. 测试新增方法的功能在编写新增方法的实现代码之后,需要进行对新增方法的功能进行测试。
可以通过编写测试用例,测试新增方法的功能是否符合预期。
4. 编译Oracle Package在新增方法的实现代码编写完成并测试通过之后,需要对Oracle Package进行编译,确保新增方法可以被正常调用。
5. 提交新增方法的更改最后一步是将新增方法的更改提交到版本控制系统中,以便其他开发人员在需要时可以使用该新增方法。
三、方法二1. 使用ALTER PACKAGE语句在已有的Oracle Package中新增方法,可以使用ALTER PACKAGE 语句。
该语句可以用来修改Oracle Package的定义,包括新增方法、修改方法的实现代码等。
2. 编写新增方法的实现代码使用ALTER PACKAGE语句,在已有的Oracle Package中新增方法的实现代码。
通过使用ALTER PACKAGE语句,可以在已有的Oracle Package中新增方法的实现代码。
3. 编译Oracle Package在新增方法的实现代码编写完成之后,需要对Oracle Package进行重新编译,确保新增方法可以被正常调用。
plsql 使用技巧PL/SQL是Oracle数据库中的一种编程语言,它结合了SQL语句和过程性编程语言的特点,提供了一种强大的数据库开发工具。
下面是一些PL/SQL使用技巧:1. 使用块:块是PL/SQL程序的基本单元。
使用块可以将一组相关的语句组织在一起,并提供一些错误处理机制。
块通常用于存储过程、触发器和函数中。
2. 使用游标:游标是用于在PL/SQL程序中处理查询结果的一种机制。
使用游标可以逐行处理查询结果,提供更灵活的数据操作方式。
3. 使用异常处理:异常处理是一种处理程序运行过程中出现异常的机制。
在PL/SQL中,可以使用EXCEPTION块来处理异常情况,提高程序的稳定性。
4. 使用存储过程和函数:存储过程和函数是一种将一组SQL语句和过程性语句组织在一起的机制。
使用存储过程和函数可以将复杂的逻辑封装起来,提高程序的可维护性和重用性。
5. 使用触发器:触发器是在数据库表中定义的一种特殊类型的存储过程。
使用触发器可以根据数据库表中的数据变化触发特定的逻辑处理。
6. 使用PL/SQL调试器:PL/SQL调试器是一种用于调试PL/SQL程序的工具。
使用调试器可以逐步执行PL/SQL代码,并查看变量的值和程序执行的状态,方便程序的调试和排错。
7. 使用PL/SQL包:PL/SQL包是将相关的存储过程、函数和变量组织在一起的一种机制。
使用包可以提供更好的模块化和封装性,方便程序的管理和维护。
8. 使用PL/SQL游标变量:PL/SQL游标变量是一种特殊的变量类型,用于在程序中保存游标的状态。
使用游标变量可以提高游标的灵活性和可重用性。
9. 使用PL/SQL集合类型:PL/SQL提供了各种集合类型,如数组、表和记录。
使用集合类型可以方便地处理多个数据元素,提高程序的性能和可读性。
10. 使用PL/SQL优化技巧:在编写和调试PL/SQL程序时,可以使用一些优化技巧来提高程序的性能。
例如,使用合适的索引、批量操作和合理的逻辑结构等。
PL/SQL 是Oracle 数据库中用于存储过程、函数、触发器和包等程序的编程语言。
以下是PL/SQL 使用手册的参考指南:1、连接Oracle 数据库:在开始编写PL/SQL 程序之前,您需要先连接到Oracle 数据库。
可以通过以下步骤连接到数据库:•运行PLSQL,将弹出数据库连接对话框。
•在对话框中选择要连接的Oracle 服务名,并输入用户名和密码。
•点击“OK”按钮进行连接。
2、登录信息保存功能设置:如果设置了登录信息保存功能,可以通过以下方式连接数据库,不必每次输入用户名和密码。
•进入PLSQL 后,在菜单区点击右键,出现PLSQL 配置界面。
•将“Store with password” 选中即可。
这样,第一次通过用户名/密码登录某数据库后,下次就不用再输入用户名/密码了。
3、切换数据库连接:在PLSQL 中,可以通过以下步骤切换到不同的数据库连接:•在菜单中选择“Change Database” 选项。
•在弹出的对话框中,选择要连接的数据库。
•点击“OK” 按钮完成切换。
4、编写PL/SQL 程序:在连接到数据库后,可以开始编写PL/SQL 程序。
以下是一些常见的PL/SQL 程序示例:•存储过程:用于封装复杂的SQL 查询和数据处理逻辑。
可以使用PL/SQL 编写一个或多个SQL 语句的集合,并将其封装在一个可重用的过程中。
•函数:用于计算并返回一个值。
可以编写一个或多个SQL 语句,将其封装在一个函数中,并使用输入参数来控制计算过程。
•触发器:用于在数据库中执行自动操作。
可以在特定的数据库事件(如插入、更新或删除记录)发生时触发自动执行的操作。
•包:用于封装多个PL/SQL 程序和逻辑单元。
可以将相关的存储过程、函数和数据类型封装在一个包中,以便更好地组织和管理代码。
5、执行SQL 语句:在PLSQL 中,可以使用以下步骤执行SQL 语句:•在菜单中选择“Execute” 或“Run” 选项。
oracle中package用法,在Oracle数据库中,Package是一种特殊的对象,它是一个包含多个过程、函数、变量和常量的集合体。
由于Oracle数据库中的代码重用性和可维护性的要求越来越高,Package的使用变得越来越重要。
本文将详细介绍Package的用法,包括创建Package、包含的过程和函数的编写、调用以及维护。
【一、Package的概述】Package是Oracle数据库中提供的一种用于封装相关过程、函数、变量和常量的对象。
它可以在多个程序之间共享和重用,提高代码的可维护性和可复用性。
Package中的过程和函数可以调用其他过程和函数,这样一来可以实现多层次的代码调用和封装。
【二、Package的创建】1. 创建Package规约:在Oracle数据库中,通过使用CREATE PACKAGE语句来创建一个Package规约。
这个规约定义了Package的名称、变量和常量的声明,以及过程和函数的声明可以是公共的还是私有的。
2. 创建Package体:在定义好Package规约后,需要使用CREATE PACKAGE BODY语句来创建Package的体。
Package体定义了Package中实际的过程和函数的具体实现。
【三、Package的结构】Package由规约(Specification)和体(Body)两部分组成。
1. Package规约:Package规约定义了Package的接口,即可供外部调用的过程和函数,以及公共的变量和常量。
它使用CREATE PACKAGE语句创建。
2. Package体:Package体定义了Package中所包含的过程和函数的具体实现。
它使用CREATE PACKAGE BODY语句创建。
【四、Package中过程和函数的编写】Package中的过程和函数是实现具体业务逻辑的代码段,它们可以被其他过程和函数调用,也可以被外部程序直接调用。
--修改表的内容 DDLselect*from emp;--使用insert添加行insert into emp(ename,job,empno)values('WANGYI','DBA','2000');commit;--忽略列的的列表insert into emp values(3000,'ZHANG','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),2000,null,10); commit;--为列指定空值insert into emp values(3001,'ZHANG1','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),null,null,null); rollback;--在列值中使用单引号和双引号单引号里面的双引号表示单引号,例如插入 O’nal insert into emp(ename,empno)values('O''nal',2222);--复制一个表create table emp2 as select*from emp ;truncate table emp2;--从一个表向另外一个表复制行insert into emp2(empno,ename,sal)select empno,ename,sal from emp where empno=7369;rollback;insert into emp2 select*from emp where empno=7369;--使用update修改行update emp set ename='KKKK'where ename='WANGYI';--如果有两个WANG则两个都修改COMMIT;--returning 子句variable sk numberupdate emp set sal=3000where ename='KKKK'returning avg(sal)into: sk;----有问题--使用delete 删除行delete from emp where ename='KKKK';commit;--jdbc_lobselect*from emp;drop table JDBCTEST;SELECT*FROM jdbct1;alter table jdbct1 add(comm number(10));alter table jdbct1 drop(comm);--包:规范+包体--创建包规范create or replace package emp2_package as --指定包的用户可以使用的过程和函数的列表(同时包括变量,类型定义,游标)function func_sum(n number,m number) return number ;end emp2_package;--创建包体create or replace package body emp2_package as --实现声明中的方法 function func_sum(n number, m number) return number assums number;beginsums:=n+m;return sums;end func_sum;end emp2_package;--调用包中的函数和过程select emp2_package.func_sum(1,2) from dual;--获取包中函数和过程的信息select * from user_procedures ;--删除包drop package emp2_package;--触发器--创建触发器(简单的)create or replace trigger trigger_testbefore insert on emp2for each row when (new.sal>10000) --行级触发器begin-- raise_application_error('-20011','工资不能超过1W!');dbms_output.put_line('工资不能超过1W!');end trigger_test;--测试触发器insert into emp2(empno,ename,sal) values (9527,'gggg',11111);--创建触发器create or replace trigger trigger_test3after insert or update of sal on empfor each row when (new.sal>old.sal*0.75)begin--update emp set sal=:old.sal;dbms_output.put_line(:old.sal);end trigger_test3;--创建触发器(insert)create or replace trigger trigger_2before insert or update on empfor each row when (new.sal<100)begininsert into emp(empno,ename,sal) values(1111,'tttttt',:new.sal*10);end;--测试触发器insert into emp(empno,ename,sal) values(2312,'rrrr',1000);update emp set sal=9999 where ename='rrrr';select * from emp;select * from dual;--dual是oracle 中的一张虚表,用于测试函数用--大小写转换select upper('abc') from dual; --转换为大写select upper(DUMMY) from dual;select lower(DUMMY) from dual; --转换为小写select lower(dummy) from dual; --字段不区分大小写select initcap('this is a test') from dual; --单词首字母大写--字符操作select concat('aaa', 'bbb') from dual; --连接两个字符串select 'aaa' || 'bbb' from dual; --也可以用||连接字符串select substr('abcdef', 3) from dual; --拆分字符串。
Oracl e PL/SQL包(package)目录Oracle PL/SQL包(package) (1)一、什么是PL/SQL包 (2)1、PL/SQL包举例 (3)二、PL/SQL包的优点 (5)三、理解包说明 (5)四、理解包体 (7)五、包特性的例子 (8)六、包中私有项和公有项 (14)七、重载包级子程序 (14)八、包STANDARD是如何定义PL/SQL环境的 (15)九、系统包一览 (15)1、关于DBMS_ALERT包 (15)2、关于DBMS_OUTPUT包 (16)3、关于DBMS_PIPE包 (16)4、关于UTL_FILE包 (16)5、关于UTL_HTTP包 (17)十、包编写准则 (17)一、什么是PL/SQL包包就是一个把各种逻辑相关的类型、常量、变量、异常和子程序组合在一起的模式对象。
包通常由两个部分组成:包说明和包体,但有时包体是不需要的。
包说明(简写为spec)是应用程序接口;它声明了可用的类型、变量、常量、异常、游标和子程序,包体(Body)部分完全定义游标和子程序,并对说明中的内容加以实现。
如下例所示,我们可以认为说明部分是一个可选接口,而包体是一个"黑盒"。
我们可以调试、增强或替换一个包体而不同改变接口(包说明)。
我们可以从SQL*Plus中使用CREATE PACKAGE语句来创建一个包。
语法如下:CREATE [OR REPLACE] PACKAGE package_name[AUTHID {CURRENT_USER | DEFINER}]{IS | AS}[PRAGMA SERIALLY_REUSABLE;][collection_type_definition ...][record_type_definition ...][subtype_definition ...][collection_declaration ...][constant_declaration ...][exception_declaration ...][object_declaration ...][record_declaration ...][variable_declaration ...][cursor_spec ...][function_spec ...][procedure_spec ...][call_spec ...][PRAGMARESTRICT_REFERENCES(assertions) ...]END [package_name];[CREATE [OR REPLACE] PACKAGE BODYpackage_name {IS | AS}[PRAGMA SERIALLY_REUSABLE;]在包说明部分声明的内容都是公有的,对应用程序是可见的。
我们必须在所有的其他内容(除了用于为一个特殊的函数命名的编译指示;这样的编译指示必须跟在函数说明之后)声明之后才可以声明子程序。
包体中的内容有私有的,它实现了说明部分定义的细节内容,并且对应用程序是不可见的。
紧跟着包体声明部分的是一个可选的初始化部分,它用于初始化包中的变量等。
AUTHID语句决定了是否是所有的打包子程序都按定义者权限(默认)或调用者权限执行,其中涉及到的模式对象是在定义者的模式中解析还是在调用者的模式中解析。
一个调用说明能让我们在Oracle数据词典中发布一个Java方法或外部C函数。
调用说明靠把程序的名称、参数类型和返回类型映射到它们的SQL副本(SQL counterpart)中来发布程序。
1、PL/SQL包举例在下面的例子中,我们把一个记录类型、游标和两个employment过程进行打包。
要注意,过程hire_employee使用数据库序列empno_seq和函数SYSDATE分别插入到字段雇员编号和雇佣日期。
mgr NUMBER,sal NUMBER,comm NUMBER,deptno NUMBER);PROCEDURE fire_employee(emp_id NUMBER);END emp_actions;CREATE OR REPLACE PACKAGE BODY emp_actions AS-- bodyCURSOR desc_salary RETURN emprectyp ISSELECT empno, salFROM empORDER BY sal DESC;PROCEDURE hire_employee(ename VARCHAR2,job VARCHAR2,mgr NUMBER,sal NUMBER,comm NUMBER,deptno NUMBER) ISBEGININSERT INTO empVALUES (empno_seq.NEXTVAL,ename,job,mgr,SYSDATE,sal,comm,deptno);END hire_employee;PROCEDURE fire_employee(emp_id NUMBER) ISBEGINDELETE FROM empWHERE empno = emp_id;END fire_employee;END emp_actions;只有在包说明部分的声明内容对应用程序才是可见可访问的;包体的详细实现是不可见不可访问的。
所以,我们可以在不重新编译调用程序的前提下修改包体(实现)。
二、PL/SQL包的优点包提供了几个优点:模块化、方便应用程序设计、信息隐藏、附加功能和良好的性能。
1、模块化包能让我们把逻辑相关的类型、常量、变量、异常和子程序等放到一个命名的PL/SQL 模块中。
每一个包都容易理解,包与包之间接口简单、清晰。
这将有助于程序开发。
2、轻松的程序设计设计应用程序时,我们首先要确定的是包说明中的接口信息。
我们可以在没有包体的条件下编写并编译说明部分。
然后引用该包的存储子程序也会被编译。
在完成整个应用程序之前,我们是不需要完全实现包体部分的。
3、信息隐藏有了包,我们就可以指定哪些类型、常量、变量、异常和子程序等是公有(可见和可访问)或私有(隐藏和不可访问)。
例如,如果一个包里包含了四个子程序,其中三个是公有的一个是私有的。
包就会隐藏私有子程序的实现,这样的话,如果实现内容发生改变,受到影响的只有包本身(不是我们的应用程序)。
同样,对用户隐藏实现细节也能保证包的完整性。
4、附加功能打包公有变量和游标在一个会话期会一直存在。
所以,它们可以被当前环境下的所有子程序共享。
并且它们允许我们跨事务来维护数据而不用把它保存在数据库中。
5、良好的性能在我们首次调用打包子程序时,整个包就会被加载到内存中。
所以,以后调用包中的相关子程序时,就不需要再次读取磁盘了。
包能阻塞级联依赖,这样就能避免不必要的编译。
例如,如果我们改变打包函数的实现,Oracle不需要重新编译调用子程序,因为它们并不依赖于包体。
三、理解包说明包说明包括了公有声明。
这些声明的作用于对于数据库模式来说是本地的,对于包来说是全局的。
所以,被声明的内容可以从应用程序中和包的任何地方访问。
下图演示了包的作用范围:说明中列出了包中对应用程序所有可用的资源。
例如,下面的声明演示了一个接受INTEGER类型的参数并返回一个INTEGER结果的函数fac:FUNCTION fac (n INTEGER) RETURN INTEGER; -- returns n!这些就是我们要调用的函数的所有信息。
我们并不需要考虑它的实现细节(如,是使用迭代还是递归)。
只有子程序和游标有实现部分。
所以,如果一个说明只有类型、常量、变量、异常的声包trans_data不需要包体,因为类型、常量、变量和异常并没有实现部分。
这样的包能让我们定义全局变量,可供子程序和数据库触发器使用。
1、引用包的内容如果要引用包内声明的类型、常量、变量、异常和子程序等,就得使用点标识:package_name.type_namepackage_name.item_namepackage_name.subprogram_namepackage_name.call_spec_name我们可以从数据库触发器、存储子程序、3GL(第三代程序语言)应用程序和各种Oracle 工具中引用包中的内容。
例如,我们可以从SQL*Plus中调用过程hire_employee:SQL> CALL emp_actions.hire_employee('TATE', 'CLERK', ...);下例中,我们可以从一个嵌入到Pro*C的匿名PL/SQL块调用同样的过程。
实参emp_name 和job_title是主变量(即声明在主环境中的变量)。
EXEC SQL EXECUTEBEGINemp_actions.hire_employee(:emp_name, :job_title, ...);引用约束我们不能直接或间接地引用远程打包变量。
例如,我们不能远程调用下面的过程,因为它在参数初始化子句中引用了打包变量:CREATE PACKAGE random ASseed NUMBER;PROCEDURE initialize (starter IN NUMBER := seed, ...);同样,我们也不能在包的内部引用主变量。
四、理解包体包体是对包说明的实现。
也就是说包体中包含了包说明中声明的每一个游标和子程序的实现。
一定要记住,包体内实现的内容只有在包说明中声明之后才能在包外引用。
为了匹配包说明和包体,PL/SQL做了一个token-by-token的子程序头比较。
所以,除了空白内容,是本地的。
因此,声明的内容在包体之外是无法访问的。
与包说明部分不同的是,包体的声明部分可以包含子程序体。
在包体的声明部分之后是一个可选的初始化部分,一般是用于初始化包中变量。
包初始化部分起到的作用并不大,与子程序不同,它不能被调用或是接受参数。
因此,包初始化部分只能在我们首次引用包的时候运行一次。
请记住,如果一个包说明只声明了类型、常量、变量、异常和调用说明,那么,包体部分就不是必需的了。
但是,包体可以用于初始化包说明中声明的内容。
五、包特性的例子下面是一个名为emp_actions的包。
包说明声明了类型、游标、异常和子程序:●类型EmpRecTyp和DeptRecTyp●游标desc_salary●异常invalid_salary●函数hire_employee和raise_salary●过程fire_empire和raise_salary在编写包之后,我们就可以开发引用它声明的类型,调用它的子程序、游标和异常的应用程序。
创建包时,它就会被存放在Oracle数据库中供广泛地调用。