开发者社区> lemotree> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

oracle-故障-程序包调用报ORA-06508

简介:
+关注继续查看

程序包调用报ORA-06508: PL/SQL: 无法找到正在调用的程序单元

背景:

开发人员修改一个包里一个过程,修改成功,并重新编译成功,在程序日志发现调用这个包报错ORA-06508: PL/SQL: 无法找到正在调用的程序单元

-----会话1

CREATE OR REPLACE PACKAGE SimplePkg AS  
   v_GlobalVar1 NUMBER := 1;  
   PROCEDURE UpdateVar;   
END SimplePkg;  
/
CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/

set line 300
col object_name for a30
 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT owner, object_type, object_name, status,created,last_ddl_time
     FROM all_objects
    WHERE 
       object_name in (SELECT name FROM dba_dependencies WHERE OWNER = 'TEST' AND referenced_name='SIMPLEPKG' )
       --AND status = 'INVALID'
     ORDER BY OWNER;


OWNER                          OBJECT_TYPE         OBJECT_NAME                    STATUS  CREATED             LAST_DDL_TIME
------------------------------ ------------------- ------------------------------ ------- ------------------- -------------------
TEST                             PACKAGE BODY        SIMPLEPKG                      VALID   2022-03-01 18:33:21 2022-03-01 18:33:21
TEST                             PACKAGE             SIMPLEPKG                      VALID   2022-03-01 18:33:16 2022-03-01 18:33:16

-----会话2

BEGIN   
   simplePkg.UpdateVar;   
END;  /

-----会话1

CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   yy  number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/


set line 300
col object_name for a30
 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT owner, object_type, object_name, status,created,last_ddl_time
     FROM all_objects
    WHERE 
       object_name in (SELECT name FROM dba_dependencies WHERE OWNER = 'TEST' AND referenced_name='SIMPLEPKG' )
       --AND status = 'INVALID'
     ORDER BY OWNER;



OWNER                          OBJECT_TYPE         OBJECT_NAME                    STATUS  CREATED             LAST_DDL_TIME
------------------------------ ------------------- ------------------------------ ------- ------------------- -------------------
TEST                             PACKAGE BODY        SIMPLEPKG                      VALID   2022-03-01 18:33:21 2022-03-01 18:39:29
TEST                             PACKAGE             SIMPLEPKG                      VALID   2022-03-01 18:33:16 2022-03-01 18:33:16

-----会话2

SQL>  BEGIN   
   simplePkg.UpdateVar;   
END; 
    /
 BEGIN
*
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "TEST.SIMPLEPKG" has been invalidated
ORA-04065: not executed, altered or dropped package body "TEST.SIMPLEPKG"
ORA-06508: PL/SQL: could not find program unit being called: "TEST.SIMPLEPKG"
ORA-06512: at line 2

原因:

出现这种情况的原因是因为,对于全局变量,每一个session会生成一个本地copy,如果程序重新编译的话,就会因程序里原变量找不到而丢弃该变量,继而导致这个错误。
也就是说在一个会话中调用程序包package时,会生成package中全局变量的副本,如果在另一个会话中对此package进行编译就会使前一个会话中的副本失效,故而产生错误。

处理:

要想避免这个错误,可以使程序捕获ORA-06508:的错误进行处理,也可以重新初始化会话

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
oracle数据泵EXPDP和IMPDP使用说明
<p><br></p> <p><br><br></p> <div id="mainarea"> <div> <div> <h1> <span style="white-space:pre"></span><span style="color:#3366ff">oracle数据泵EXPDP和IMPDP使用说明</span> </h1> </div> <div id="blog_
3717 0
GL_Oracle Erp常用的报表(汇总)
2014-06-27 BaoXinjian 1. 总账系统 ? 2. 应收系统 ? 3. 资产系统 ? 4. 现金管理系统 ? 5. 采购管理系统 ? 6.
724 0
Oracle数据导入导出imp/exp(转)
? ? 在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出。所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。 一、Oracle数据导出exp ?1、Exp参数详解(红色字体代表比较重要的参数):   (1)...
1530 0
ERP_基于Oracle SOA的企业服务总线整合
2015-01-01 Created By BaoXinjian 一、方案背景 随着企业信息化程度的不断提高,企业IT系统日趋庞大,跨系统流程以及各个系统之间、以及系统内部的接口需求和接口服务调用也不断增加。
857 0
Oracle数据库之开发PL/SQL子程序和包
PL/SQL块分为匿名块与命名块,命名块又包含子程序、包和触发器。 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑、企业规则写成过程或函数保存到数据库中,以便共享。 过程和函数均存储在数据库中,并通过参数与其调用者交换信息。
570 0
oracle查看包存储过程,函数,以及存储过程参数,函数参数
1. 今天查看系统代码时意识到系统中有太多的包以及它们的参数实在太多不容易记,所以想做一个查询,把它们都查出来 2.
869 0
使用Wrap加密,保护Oracle程序源代码(引)
原文转自:http://space.itpub.net/17203031/viewspace-695700 存储过程、函数、包等结构,表示了软件系统的业务逻辑和领域逻辑。
1197 0
+关注
lemotree
地球村民
92
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
http://www.vxiaotou.com