oralce中的包中的变量,过程/函数,是不是全局的?
假设,oracle收到两次不同的请求,两次请求都是调用包中的一个过程(假设为 testProcedure),这两次不同请求,oralce调用的过程testProcedure的地址是不是一样的?

解决方案 »

  1.   

    在form or report中是對某個程序的全局在oracle服務器端是對所有連接程序的全局
      

  2.   

    变量是属于过程或函数的,它在过程或函数内,可以是全局的,也可以是私有的.而过程和函数对于数据库用户来说,是全局的.
    虽然是全局的,但并不代表每个数据库用户都可以执行.只有在数据库用户拥有该过程和函数的EXECUTE的权限时,才能执行相应的过程和函数.
      

  3.   

    oraclE在执行过程和函数时,都是将其调入SGA中,所以,其它用户调用相同的过程和函数时,ORACLE会首先在SGA中查找该过程或函数是否已调入SGA,如果在SGA中已找到的话,则直接调用SGA中的过程和函数,这样,可以加快执行的速度.如果没有找到,则要从数据字典中调入过程和函数的定义了.所以,多过用户调用同一过程和函数的地址也不一定相同.
      

  4.   

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