PLSQL入门与精通(第35章:包实体部分的初始化)

37 篇文章 2 订阅
3 篇文章 0 订阅

在第33回中,虽然包装的构造只有规格部,但是例外的是,执行部可以在包装主体的最后记述,那个话将成为其他的机会。
我这次想说那个。

包实体部分的执行部,同一个会话中第一次调用包时会自动执行一次的执行部,后边再调用改包不会继续执行该执行部。

请看例子:

<1.包申明部>
SQL> CREATE OR REPLACE PACKAGE PAC1
2 IS
3 —第一次调用此包的日期和时间存放的变量
4
5 FirstCall DATE;
6 END;
7 /

包已创建。
【上述1的说明】
创建了PAC1包的申明部。
申明了一个DATE形式的变量FirstCall,目的是保存会话的时候第一次调用此包时的日期和时间。
备考:变量名的大小写没有区别

<2.包的实现(包的实体)>
SQL> CREATE OR REPLACE PACKAGE BODY PAC1
2 IS
3 --IS下面是申明部,这里没有申明的内容
4 --从以下BEGIN开始是实现的执行部(初始化块)
5 BEGIN
6 --把SYSDATE(当前日期)赋给包申明部的FirstCall变量(初始化)
7
8 FirstCall := SYSDATE;
9 END;
10 /

包实体创建完成。

【上述2的说明】
编写PAC1包装的实体(实现)部分。
从IS到BEGIN之间虽然是申明部,但是这次没有申明任何内容。
BEGIN的下面是语法执行部,这个部分是在会话(Session)中 自动执行一次的初始化的程序块。
这里是将SYSDATE函数的赋给FirstCall变量。
因此,PAC1.FirstCall变量,需要在会话中第一次调用该包的时点的时间进行初始化。

❤️.在会话1中>
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE(TO_CHAR(PAC1.FirstCall,‘yy/mm/dd hh24:mi:ss’));
3 END;
4 /
12/09/12 14:12:15 ←第一次调用包的时候,把调用时点的时间进行初始化了

PL/SQL过程成功完成。

SQL> R
1 BEGIN
2 DBMS_OUTPUT.PUT_LINE(TO_CHAR(PAC1.FirstCall,‘yy/mm/dd hh24:mi:ss’));
3* END;

12/09/12 14:12:15 ←在同一个会话中第二次执行,不再进行初始化该变量,所以值是相同的。

PL/SQL过程成功完成。

【上述3的说明】
在会话1中,在画面上显示了PAC1.FirstCall的值。
显示了两次,第一次调用包的时候启动了初始化块,这个时点的日期和时间被存储在PAC1.FirstCall中。
第二次未执行初始化块,PAC1.FirstCall变量的值没有变化。

<4.会话2> //需要重新连接数据库创建一个新的会话;
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE(TO_CHAR(PAC1.FirstCall,‘yy/mm/dd hh24:mi:ss’));
3 END;
4 /

12/09/1214:15:40←第一次调用包初始化被执行了

PL/SQL过程成功完成。

SQL> R
1 BEGIN
2 DBMS_OUTPUT.PUT_LINE(TO_CHAR(PAC1.FirstCall,‘yy/mm/dd hh24:mi:ss’));
3* END;

12/09/1214:15:40←由于在一个会话中,继续使用包不会执行第二次初始化块,所以值相同

PL/SQL过程成功完成。

【上述4的说明】
这是从别的画面连接的,或者新启动一个SQLPLUS开启新的会话。
同样参照PAC1.FirstCall变量的值,与会话1得值不同。
在同一个会话中连续显示两次,二次值是相同的。
也就是说,一次会话只启动一次初始化块。

【总结】
这就是包实体的初始化模块的作用。

本次到此结束

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值