代码之家  ›  专栏  ›  技术社区  ›  FrustratedWithFormsDesigner

PL/SQL包无效

  •  24
  • FrustratedWithFormsDesigner  · 技术社区  · 15 年前

        ORA-04068: existing state of packages has been discarded
        ORA-04061: existing state of package body "USER3.PKG_MY_PACKAGE" has been invalidated
        ORA-04065: not executed, altered or dropped package body "USER3.PKG_MY_PACKAGE"
        ORA-06508: PL/SQL: could not find program unit being called: "USER3.PKG_MY_PACKAGE"
        ORA-06512: at line 34
    

    我再次运行脚本(不更改系统中的任何其他内容),脚本成功执行。

    我认为,当我编译之前,我执行的脚本,将修复任何无效的引用。这是100%可复制的,我使用这个脚本越多,它变得越烦人。什么会导致这种情况,什么能解决它?

    (oracle 10g,使用PL/SQL Developer 7)

    4 回复  |  直到 14 年前
        1
  •  24
  •   Community CDub    7 年前

    背景

    existing state of packages has been discarded

    这是由包体中存储的全局变量引起的。
    documentation ).

    由于该包已在会话中使用,因此Oracle假定此状态与您相关。其中一些变量现在可能有不同的值,当您重新编译主体时,这些值将被重置。

    抛出这个异常,这样您的客户机就知道他们不能再依赖这些变量了。

        2
  •  22
  •   PaulJ    15 年前

    exec DBMS_SESSION.RESET_PACKAGE
    exec DBMS_SESSION.MODIFY_PACKAGE_STATE( DBMS_SESSION.REINITIALIZE )
    

    他们照名字的意思做。

        3
  •  1
  •   blerontin    3 年前

    • 您正在调用的包/过程无效(尽管如果单独调用它也可以工作) 检查此查询中是否有包的条目或包中使用的对象 所有\u对象
    select * from all_objects where status = 'INVALID' and owner = 'SCHEMA_NAME';
    
    • 检查你的包是否有全局变量?如果是,则检查这些变量是否未被任何其他会话更改,最好删除这些全局变量/使用函数

    • 运行下面的脚本来编译模式中的所有对象

    begin
       dbms_utility.compile_schema('SCHEMA_NAME', false); 
    end;
    
        4
  •  0
  •   Paul    7 年前

    上面的错误:ORA-06508:PL/SQL:找不到正在调用的程序单元。

    试图调用找不到的存储程序时引起的。程序可能已被删除或不兼容地修改,或编译时出错。

    检查所有引用的程序(包括它们的包体)是否存在并兼容。

    您可以运行此查询来查找无效对象,这可能会导致ORA-06508错误:

    公司id, 公司名称, 状态, 命名空间, 从