oralce中的包中的变量,过程/函数,是不是全局的?
oralce中的包中的变量,过程/函数,是不是全局的?
假设,oracle收到两次不同的请求,
两次请求都是调用包中的一个过程(假设为 testProcedure),
这两次不同请求,oralce调用的过程testProcedure的地址是不是一样的?
------解决方案--------------------在form or report中是對某個程序的全局
在oracle服務器端是對所有連接程序的全局
------解决方案--------------------oralce调用的过程testProcedure的地址一样的
因为第一次调用包时,包将初始化,从硬盘调入放在 系统全局工作区的共享缓冲区 中,
而包的运行状态(变量 游标等)则被放入 用户全局区的会话存储区 中,包的运行状态与数据库会话期具有相同的生存期.
如果在创建包时,加入 pragma serially_reusable 可以将包的运行状态保存在系统全局工作区,而不是用户全局区.这样每次调用包以后,该包的运行态就会被释入,就可以对包作连续的调用(每次调用都是独立的,互不影响).
create or replace package testProcedure is
pragma serially_reusable ;
...