设为首页 收藏本站
查看: 591|回复: 0

[经验分享] oracle 包中的全局全量与ORA-04068错误

[复制链接]

尚未签到

发表于 2015-11-8 07:24:01 | 显示全部楼层 |阅读模式
  ORA-04068错误的产生如下:oracle 9i 中有两个正常使用的包pkgA和pkgB,创建语句分别如下:

SQL> create or replace package pkgB as
2      procedure prt ;
3  end pkgB;
4  /
程序包已创建。
SQL> create or replace package body pkgB as
2      procedure prt is
3      begin
4          dbms_output.put_line( 'char_yes='||pkgA.char_yes);
5      end prt;
6  end pkgB;
7  /
程序包主体已创建。
--现有两个会话(session) A和B(登录两个sqlplus),按如下顺序执行语句,出现下述情况:
会话B:
SQL> set serverout on
SQL> exec pkgB.prt;
char_yes=2
PL/SQL 过程已成功完成
会话A:
SQL> create or replace package pkgA as
2      char_yes constant char := '2';
3  end pkgA;
4  /
程序包已创建。
会话B:
SQL> exec pkgB.prt;
BEGIN pkgB.prt; END;
*
ERROR 位于第 1 行:
ORA-04068: 已丢弃程序包  的当前状态
ORA-04061: package "SCOTT.PKGA" 的当前状态失效
ORA-04065: 未执行,已更改或删除 package "SCOTT.PKGA"
ORA-06508: PL/SQL: 无法在调用之前找到程序单元
ORA-06512: 在"SCOTT.PKGB", line 4
ORA-06512: 在line 1
  详细原因:在包头中声明的变量的作用域为全局范围,故称为全局变量,这些变量对于具有执行权限的任何PL/QSL块都是可见的。由于包的变量都存放在用户全局区(UGA)的会话存储区中,全局变量自然也不例外。故全局变量的&#20540;是基于会话级别的,在整个会话期间它都会维持它的最新&#20540;,在会话中设置、修改、维护全局变量的&#20540;对其它会话不会有影响。不同的会话都有自己全局变量的本地副本。</p><p>当pl/sql包pkgA进行重编时,引用了pkgA的其它包,包括pkgB,全都会自动变成失效状态。pkgB下次执行时,发现状态已失效,于是按oracle机制自动进行重编。由于全局变量的全局性是会话级别的,每个会话本地副本中全局变量的&#20540;可能都不一样。但自动重编译导致全局变量&#20540;的重新获取,覆盖了本地副本中的&#20540;。此时,oracle若再“静默”地自动重编译,会导致各会话本地全局变量的&#20540;变得不可控,因为它不再是以前的&#20540;了,而是被重置成了初始&#20540;。因此,oracle必须采取抛出错误的办法来显式地通知用户会话,否则,用户没办法知道全局变量的&#20540;已发生了变化。这样看来,认为“ORA-04068”错误是一种警告而不是一种错误的观点也是有道理的,它的确更多的像一种警告。
  
  
  

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-136404-1-1.html 上篇帖子: ORA-24247问题解决 下篇帖子: ORA-16179: incremental changes to "log_archive_dest_1" not allowed with SPFILE
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表