PLSQL入门与精通(第28章:包的申明和定义详细解释)

本文深入介绍了包的概念,包括其声明与实现两大部分。包是将过程、函数、变量等进行封装的内容,通过分离接口与实现的方式提高代码的复用性和维护性。文章详细解释了如何使用CREATE OR REPLACE PACKAGE及CREATE OR REPLACE PACKAGE BODY语句来进行包的声明与实现,并通过实例展示了包内过程间的调用关系。
摘要由CSDN通过智能技术生成

上次针对包进行了简单的说明,这次进行深入介绍。
正如上回解说的那样,包是将过程、函数、变量等打包一块的内容,分为申明和定义两个部分。
(实际上只有申明没有定义的包存在,其他时间介绍。)

申明部是“总结了用户和应用程序可以使用的东西或者接口”。
与此相对,定义中记述的内容不能由用户或应用程序直接使用的内容。实现了接口与实现分离的作用。

申明部中记述的过程和函数的接口,对于用户或者调用者来看所需的接口的信息。
因此,申明部不会写把程序和功能实现逻辑完全写出来。

申明部记述的过程和函数的接口的信息,也就是说,程序和函数的名称、临时参数的名称、模式、数据类型、
还有函数的情况下返回的数据类型。
他是过程和函数定义的「IS」之前的部分。
这个部分叫过程和函数的「式样」。

基本语法如下:
申明部用 CREATE[OR REPLACE] PACKAGE 来实现,
实现用 CREATE[OR REPLACE] PACKAGE BODY 来实现。

<包申明部语法>
CREATE OR REPLACE PACKAGE 包名
IS
变量声明;
程序和函数的声明;—比定义的“IS”更早的部分
END;

<包实现的语法>
CREATE OR REPLACE PACKAGE BODY包装名称
IS
声明变量;
完整的过程和函数的定义逻辑;
END;

以下是具体例子:
在本示例中,定义了包PAC1,面向客户定义了一个PROCA,传递了一个参数。
PROCA调用PROCB,PROCB中 吧 PROCA传递的参数+1。
PROCA里边吧计算的值显示到画面上。
为了更容易理解包装的本质,在其他程序PROCB中进行值加1的处理,将其结果暂时保存在变量V1中。

<包的申明>
SQL> CREATE OR REPLACE PACKAGE PAC1
2 IS
3 —PROCA程序的声明
4 PROCEDURE PROCA ( PA IN NUMBER);
5 END;
6 /

包已创建。

<包的实现>
SQL> CREATE OR REPLACE PACKAGE BODY PAC1
2 IS
3 --变量V1的声明
4 V1 NUMBER;
5 --PROCB过程的完整定义
6 PROCEDURE PROCB ( PB IN NUMBER)
7 IS
8 BEGIN
9 V1 := PB + 1;
10 END PROCB;

11 —PROCA过程的完整定义
12 PROCEDURE PROCA ( PA IN NUMBER)
13 IS
14 BEGIN
15 PROCB(PA);–调用PROCB过程
16 DBMS_OUTPUT.PUT_LINE(V1);
17 END PROCA;
18 END;
19 /

包主体完成。

<包执行过程示例>             
 SQL>SET SERVEROUT ON  --使画面输出有效              
 SQL>EXEC PAC1.PROCA(99)-  -在参数99中调用PAC1封装的PROCA              
 100           
 PL/SQL过程成功完成。    

这里,包申明部的PROCA与包实现的PROCA的定义。
另外,注意包的实现里边,PROCB程序在申明部没有被申明。
也就是说,PROCB过程不能由用户或者其他程序直接调用。
用户能够调用的是PROCA,PROCB是由PROCA调用。

同样,定义部里边定义的变量V1(定义第4行)也不能由用户直接参照使用。
变量V1仅限于定义实体中的PROCB和PROCA所使用的。

像这样,处理时需要的变量和过程,用户不需要直接使用,这时候只需要在包实现里边记述即可,
不需要记述在包的定义部部。

无论是申明部还是实现部,变量声明前如果有程序或函数,则会发生编译错误。
譬如在上述实现示例中,在变量V1定义之前,如果有PROCA和PROCB的定义,则会发生编译错误。

另外,申明部没有申明的程序和功能,需要在实现部里边优先优先,否则会出错。
因此,在上述实现的例子中,PROCB的定义如果写在PROCA的定义之后,就会发生编译错误

这是关于包的申明和定义详细解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值