当包第一次被动调用时,将进行初始化;比如将包从硬盘上调到内存中来,放到系统全局工作区的共享缓冲池中,包的运行状态则被放到用户全局区的会话中存储区中,因此可以保证每个调用包的会话都拥有包的运行副本,当会话结束时,包的运行状态才会被释放。
也就是说,包从第一次调用被初始化一直到会话结束才释放其运行状态,因此包中的变量具有会话级的作用域,因而可以跨多个事物存储数据。
如果再定义包规范时,指定了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. 适合初学Altium Designer的教学视频

    以下推荐的我都亲自看过,个人感觉确实不错,可以有助于了解流程,以及一些设计规范 首先是凡亿的PCB教学,贵是贵了点,不过也有免费的,讲解的很详细,而且还有专门的群,610359270 http://w ...

  2. 【Mac】gem install 出错 You don't have write permissions for the /Library/Ruby/Gems

    问题描述 RedisDump 是一个用于 Redis 数据导人/导出的工具,是基于 Ruby 实现的,需要先安装 Ruby.但因为 Mac 自带有 Ruby 所以我直接用gem install red ...

  3. 基于visual studio 2017 以及cubemx 搭建stm32的开发环境(1)

    参考如下文档: 传送门:http://www.stm32cube.com/article/128 如果链接不存在的话,下载我截屏好的图: 传送门:https://pan.baidu.com/s/1NC ...

  4. R语言学习笔记(二十一五):如何如何提升R语言运算的性能以及速度

    在R中获得快速运行代码的方法 使用向量化运算 R语言的并行计算可以用parallel和foreach包 加快R运行速度还可以使用cmpfun()函数即字节码编译器 再者就是在R中调用C或C++ 同时还 ...

  5. Hadoop命令大全

    Hadoop命令大全 分类: 云计算2011-03-01 15:04 6852人阅读 评论(0) 收藏 举报 hadoop作业任务集群class脚本 1.列出所有Hadoop Shell支持的命令   ...

  6. 20155306 实验二 Java面向对象程序设计

    20155306 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要 ...

  7. 20155313 实验三《Java面向对象程序设计》实验报告

    一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器>课程 2.完成实验.撰写实验报 ...

  8. class kind type sort区别

    class多用于 级别比如高级货就是 first class,primary class等等,以此类推kind 和sort 基本一样,就像你说的,译为 种类,what kind of疑问,回答时用so ...

  9. WPF MVVM从入门到精通1:MVVM模式简介

    原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 W ...

  10. 【转】odoo学习之:开发字段解析

    odoo新API中,字段类型不变,继承改变 1.旧的API定义模型: from openerp.osv import osv,fields class oldmodel(osv.osv): #模型名称 ...