oralce中的包中的变量,过程/函数,是不是全局的?
假设,oracle收到两次不同的请求,两次请求都是调用包中的一个过程(假设为 testProcedure),这两次不同请求,oralce调用的过程testProcedure的地址是不是一样的?
假设,oracle收到两次不同的请求,两次请求都是调用包中的一个过程(假设为 testProcedure),这两次不同请求,oralce调用的过程testProcedure的地址是不是一样的?
调试欢乐多
虽然是全局的,但并不代表每个数据库用户都可以执行.只有在数据库用户拥有该过程和函数的EXECUTE的权限时,才能执行相应的过程和函数.
而包的运行状态(变量 游标等)则被放入 用户全局区的会话存储区 中,包的运行状态与数据库会话期具有相同的生存期.
如果在创建包时,加入 pragma serially_reusable 可以将包的运行状态保存在系统全局工作区,而不是用户全局区.这样每次调用包以后,该包的运行态就会被释入,就可以对包作连续的调用(每次调用都是独立的,互不影响).create or replace package testProcedure is
pragma serially_reusable ;
...