日期:2014-05-17  浏览次数:20715 次

oralce中的包中的变量,过程/函数,是不是全局的?
oralce中的包中的变量,过程/函数,是不是全局的?


假设,oracle收到两次不同的请求,

两次请求都是调用包中的一个过程(假设为 testProcedure),

这两次不同请求,oralce调用的过程testProcedure的地址是不是一样的?


------解决方案--------------------
在form or report中是對某個程序的全局

在oracle服務器端是對所有連接程序的全局
------解决方案--------------------
oralce调用的过程testProcedure的地址一样的

因为第一次调用包时,包将初始化,从硬盘调入放在 系统全局工作区的共享缓冲区 中,
而包的运行状态(变量 游标等)则被放入 用户全局区的会话存储区 中,包的运行状态与数据库会话期具有相同的生存期.
如果在创建包时,加入 pragma serially_reusable 可以将包的运行状态保存在系统全局工作区,而不是用户全局区.这样每次调用包以后,该包的运行态就会被释入,就可以对包作连续的调用(每次调用都是独立的,互不影响).

create or replace package testProcedure is
pragma serially_reusable ;
...