当包第一次被动调用时,将进行初始化;比如将包从硬盘上调到内存中来,放到系统全局工作区的共享缓冲池中,包的运行状态则被放到用户全局区的会话中存储区中,因此可以保证每个调用包的会话都拥有包的运行副本,当会话结束时,包的运行状态才会被释放。
也就是说,包从第一次调用被初始化一直到会话结束才释放其运行状态,因此包中的变量具有会话级的作用域,因而可以跨多个事物存储数据。
如果再定义包规范时,指定了pragma serially_reusable ,则可以将包的运行状态保存在系统全局区,而不是用户全局区,这样每次调用包以后,包的运行状态就会被释放,这样再次调用包时,将重新开始包的状态;  注意:这种每次调用便释放的连续进行会占用大量的内存,内存的占用量与包的并发调用用户数成正比,而且当前登陆的用户数无关,因此需要谨慎使用 CREATE OR REPLACE PACKAGE pragma_serially_reusable_no AS
-- PRAGMA SERIALLY_REUSABLE; --包体的编译指示;
-- countnum测试调用FUN_TEST的次数,如果不加 pragma serially_reusable v_num 的值是会话级变量 是不会改变的
countnum NUMBER := 0 ;
V_NUM NUMBER;
FUNCTION FUN_TEST RETURN NUMBER;
END; CREATE OR REPLACE PACKAGE BODY pragma_serially_reusable_no AS
-- PRAGMA SERIALLY_REUSABLE; --包体的编译指示;
FUNCTION FUN_TEST RETURN NUMBER AS
BEGIN
countnum :=countnum+1;
DBMS_OUTPUT.PUT_LINE('第 '||countnum||' 次调用fun_test,v_num的值是:' || V_NUM || ' ;');
RETURN V_NUM;
END FUN_TEST;
BEGIN
--包体的初始化 !
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'ss')) INTO V_NUM FROM DUAL;
END pragma_serially_reusable_no;
CREATE OR REPLACE PACKAGE pragma_serially_reusable_yes AS
PRAGMA SERIALLY_REUSABLE; --包体的编译指示;
-- countnum测试调用FUN_TEST的次数,如果不加 pragma serially_reusable v_num 的值是会话级变量 是不会改变的
countnum NUMBER :=0 ;
V_NUM NUMBER;
FUNCTION FUN_TEST RETURN NUMBER;
END; CREATE OR REPLACE PACKAGE BODY pragma_serially_reusable_yes AS
PRAGMA SERIALLY_REUSABLE; --包体的编译指示;
FUNCTION FUN_TEST RETURN NUMBER AS
BEGIN
countnum :=countnum+1;
DBMS_OUTPUT.PUT_LINE('第 '||countnum||' 次调用fun_test,v_num的值是:' || V_NUM || ' ;');
RETURN V_NUM;
END FUN_TEST;
BEGIN
--包体的初始化 !
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'ss')) INTO V_NUM FROM DUAL;
END pragma_serially_reusable_yes;

--测试代码;

--测试代码 ;
DECLARE
a NUMBER ;
b NUMBER ;
BEGIN
a:=pragma_serially_reusable_yes.FUN_TEST ;
b:=pragma_serially_reusable_no.FUN_TEST;
END;

测试结果:
第 1 次调用fun_test,v_num的值是:36  ;  --counnum 不变  v_num 改变;

第 274 次调用fun_test,v_num的值是:31  ; --countnum 改变,v_num 不变;

oracle package pragma SERIALLY_REUSABLE(编译指示 告诉PL/SQL 的运行时引擎,在数据引用之时不要保持包级数据。)的更多相关文章

  1. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  2. oracle学习笔记(十五) PL/SQL语法结构以及使用

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...

  3. oracle 11g 64w 用32位的pl/sql

    1.  下载64位Oracle,解压两文件,解压完成后将文件合并,安装: 2.  下载PL/SQL,安装: 3.  下载instantclient-basic-win32-11.2.0.1.0.zip ...

  4. DBArtist之Oracle入门第3步: 安装配置PL/SQL Developer

    操作系统:            WINDOWS 7 (64位) 数据库:               Oracle 11gR2 (64位) PL/SQL Developer :    PL/SQL ...

  5. oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)

    LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...

  6. oracle学习笔记(十六) PL/SQL 异常和goto语句

    PL/SQL 异常和goto语句 异常 预定义异常 oracle常见预定义异常: 错误号 异常错误信息名称 说明 ORA-0001 DUP_VAL_ON_INDEX 试图破坏一个唯一性限制 ORA-0 ...

  7. 【PL/SQL练习】命名块: 存储过程、函数、触发器、包

    创建时定义名称 2.可以被Oracle server 保存 3.可以被任何程序调用 4.可以被共享 存储过程: 1.不带参数的存储过程: SQL> create or replace proce ...

  8. Oracle 11gR2 客户端windows 10安装后PL/SQL配置

    操作系统:windows 10 软件:Oracle 11gR2 客户端 (64 bit) PLSQL Developer 13 (64 bit) 注意:PLSQL与oracle客户端版本要一致 1. ...

  9. oracle在windows(含客户端工具pl/sql安装)下安装

    安装Oracle服务器端 系统默认创建的数据库名称为orcl,可自行修改. 全局数据库名(用来唯一标示Oracle数据库,每个数据库至少由一个Oracle系统标识符(SID)引用),orcl,后面称为 ...

随机推荐

  1. Framwork框架-网络客户端的使用

    1.引入头文件 #include "Comm.h" 2.派生自框架基类CProtocolCpMgr class NetManager : public CProtocolCpMgr ...

  2. 以太坊入门-solidity环境搭建

    本地remix-ide安装教程 一 开始安装前 准备以下软件 vs2015(主要会用到vc++的工具以及Windows sdk  ||vs2017没试过,不过应该可以) vs下载安装以及解压地址: h ...

  3. 20155210潘滢昊 2016-2017-2 《Java程序设计》第4周学习总结

    20155210 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 extends:单一继承. 抽象方法.抽象类: abstract:Java中有抽象方法的类一 ...

  4. 20155310 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

    20155310 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 •初步掌握单元测试和TDD •理解并掌握面向对象三要素:封装.继承.多态 •初步掌握UML建模 ...

  5. 20155331 ch02 课下作业

    2.96 遵循位级浮点编码规则,实现具有如下原型的函数: /* *Compute (int)f. *If conversion cause overflow or f is NaN, return 0 ...

  6. 20155337祁家伟 2016-2017-2 《Java程序设计》第2周学习总结

    20155337 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 这周我学习了从JDK到IDE的学习内容,简单来说分为以下几个部分 使用命令行和IDE两种方式 ...

  7. echarts设置小图标位置

    // <!-- 左上角小图标 --> toolbox: { show : true, // orient: 'horizontal', // 布局方式,默认为水平布局,可选为: // // ...

  8. python中快速获取本地时区当天0点时间戳的一种方法

    如下所示,看了网上的几种方法,这种方法算是代码量比较小的,同时可以保证求的是本地时区的0点时间戳,返回的是浮点数,需要的话自己转一下int In [1]: import time In [2]: fr ...

  9. Nginx入门篇(二)之Nginx部署与配置文件解析

    一.Nginx编译安装 ()查看系统环境 [root@localhost tools]# cat /etc/redhat-release CentOS Linux release (Core) [ro ...

  10. L018-crond的生产场景经验小节

    L018-crond的生产场景经验小节 怎么说呢,其实L018这节课还是巩固crond的知识,前半堂课主要是解决上堂课老师留的作业(在L017已经更新,拉到最后),然后剩下的半堂客主要是讲解了一些生产 ...