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

--测试代码;

  1. --测试代码
  2. DECLARE
  3. a NUMBER ;
  4. b NUMBER ;
  5. BEGIN
  6. a:=pragma_serially_reusable_yes.FUN_TEST ;
  7. b:=pragma_serially_reusable_no.FUN_TEST;
  8. 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. C语言中赋值表达式的返回值是什么?

    我们或多或少都有过,或者见过将赋值表达式参与运算的情况.这通常会伴随着一些意想不到的问题.今天我就见到了一段奇怪的代码: #include<stdio.h> int main() { ; ...

  2. node.js 监听message事件 message字符串丢失信息

    const dgram = require("dgram"); const server = dgram.createSocket("udp4"); serve ...

  3. Oracle入门第二天(上)——基本查询SQL

    一.SQL概述 起源于标准不再赘述,主要分为DDL,DML,DCL 相关介绍,参考MySQL章节:http://www.cnblogs.com/jiangbei/p/6696202.html 二.基本 ...

  4. 20155231 信息安全技术概论实验二 Windows口令破解

    20155231 信息安全技术概论实验二 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验人数 每组一人 系统环境 windo ...

  5. 20155239《Java程序设计》实验二(面向对象程序设计)实验报告

    实验内容 初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验步骤 单元测试 1.三种代码: 伪代码 ...

  6. 20155301 2016-2017-2 《Java程序设计》第8周学习总结

    20155301 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 1.java.util.logging包提供了日志功能相关类与接口.使用日志的起点是logg ...

  7. 【BZOJ2395】[Balkan 2011]Timeismoney

    [BZOJ2395][Balkan 2011]Timeismoney 题面 \(darkbzoj\) 题解 如果我们只有一个条件要满足的话直接最小生成树就可以了,但是现在我们有两维啊... 我们将每个 ...

  8. MySQL入门篇(三)之my.cnf配置文件详解【转】

    转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html #*** client options 相关选项 ***# #以下选项会被MySQL客 ...

  9. EF6+MVC5之Oracleo数据库的CodeFirst方式实现

    http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.htm http://www.knowsky.com/887470.htm ...

  10. Vue.js项目中,当图片无法显示时则显示默认图片

    使用require将图片进入,写法如下: data: () => ({logo: 'this.src="' + require('../assets/img.png') + '&quo ...