oracle package pragma SERIALLY_REUSABLE(编译指示 告诉PL/SQL 的运行时引擎,在数据引用之时不要保持包级数据。)
当包第一次被动调用时,将进行初始化;比如将包从硬盘上调到内存中来,放到系统全局工作区的共享缓冲池中,包的运行状态则被放到用户全局区的会话中存储区中,因此可以保证每个调用包的会话都拥有包的运行副本,当会话结束时,包的运行状态才会被释放。
也就是说,包从第一次调用被初始化一直到会话结束才释放其运行状态,因此包中的变量具有会话级的作用域,因而可以跨多个事物存储数据。
如果再定义包规范时,指定了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 的运行时引擎,在数据引用之时不要保持包级数据。)的更多相关文章
- Oracle实战笔记(第六天)之PL/SQL基础
一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...
- oracle学习笔记(十五) PL/SQL语法结构以及使用
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...
- oracle 11g 64w 用32位的pl/sql
1. 下载64位Oracle,解压两文件,解压完成后将文件合并,安装: 2. 下载PL/SQL,安装: 3. 下载instantclient-basic-win32-11.2.0.1.0.zip ...
- DBArtist之Oracle入门第3步: 安装配置PL/SQL Developer
操作系统: WINDOWS 7 (64位) 数据库: Oracle 11gR2 (64位) PL/SQL Developer : PL/SQL ...
- oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)
LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...
- oracle学习笔记(十六) PL/SQL 异常和goto语句
PL/SQL 异常和goto语句 异常 预定义异常 oracle常见预定义异常: 错误号 异常错误信息名称 说明 ORA-0001 DUP_VAL_ON_INDEX 试图破坏一个唯一性限制 ORA-0 ...
- 【PL/SQL练习】命名块: 存储过程、函数、触发器、包
创建时定义名称 2.可以被Oracle server 保存 3.可以被任何程序调用 4.可以被共享 存储过程: 1.不带参数的存储过程: SQL> create or replace proce ...
- Oracle 11gR2 客户端windows 10安装后PL/SQL配置
操作系统:windows 10 软件:Oracle 11gR2 客户端 (64 bit) PLSQL Developer 13 (64 bit) 注意:PLSQL与oracle客户端版本要一致 1. ...
- oracle在windows(含客户端工具pl/sql安装)下安装
安装Oracle服务器端 系统默认创建的数据库名称为orcl,可自行修改. 全局数据库名(用来唯一标示Oracle数据库,每个数据库至少由一个Oracle系统标识符(SID)引用),orcl,后面称为 ...
随机推荐
- Verilog的一些系统任务(二)
$monitor 任务$monitor提供了监控和输出参数列表中的表达式或变量值的功能. 格式: $monitor(p1,p2,...,pn); $monitor; $monitor ...
- 2017-2018-1 《信息安全技术》实验二——Windows口令破解
2017-2018-1 <信息安全技术>实验二--Windows口令破解 所用工具 系统:能勾起我回忆的Windows 2003 工具:LC5.SuperDic Windows口令破解 口 ...
- 20155321 2016-2017-2 《Java程序设计》第四周学习总结
20155321 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六.七章 继承 多态 接口 相应的语法细节 继承 关键字 extends 格式 class ...
- 无旋treap的区间操作实现
最近真的不爽...一道维修数列就做了我1上午+下午1h+1晚上+晚上1h+上午2h... 一道不错的自虐题... 由于这一片主要讲思想,代码我放这里了 不会无旋treap的童鞋可以进这里 呵呵... ...
- mysqldump: Got errno 28 on write(mysql)
使用mysqldump进行数据库备份的时候,出现下面的错误 mysqldump: Got errno 28 on write 上网查了一下:出现这个错误,是因为磁盘的空间不足 再看系统空间使用 ...
- JS基础,课堂作业,计算器
网页内的简单计算器 <script> var a = parseInt(prompt("请输入第一个数字:")); var b = parseInt(prompt(&q ...
- JUC——TimeUnit工具类(二)
TimeUnit工具类 在java.util.concurrent开发包里面提供有一个TimeUnit类,这个类单独看它的描述是一个时间单元类.该类是一个枚举类,这也是juc开包里面唯一的一个枚举类. ...
- Office365创建通讯组
Office365创建通讯组 命令 new-DistributionGroup -Name 'test' -Members tom@msazure.cn 结果 命令 new-DistributionG ...
- NodeJS实现同步的方法
NodeJS被打上了单线程.非阻塞.事件驱动…..等标签. 在单线程的情况下,是无法开启子线程的.经过了很久的研究,发现并没有thread函数!!!但是有时候,我们确实需要“多线程”处理事务.node ...
- redis rdb aof比较
Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...