Oracle 包的现有状态已无效

Oracle 包的现有状态已无效,oracle,plsql,Oracle,Plsql,我面临着这个错误 我有两个模式A和模式B 模式B包含一个表my_table,其中插入了值 在schemaB中,每行都有一个为my_表编写的触发器my_触发器 CREATE OR REPLACE TRIGGER schemaB.my_trigger ON schemaA.my_table FOR EACH ROW BEGIN IF INSERTING TH

我面临着这个错误

我有两个模式A和模式B

模式B包含一个表my_table,其中插入了值

在schemaB中,每行都有一个为my_表编写的触发器my_触发器

            CREATE OR REPLACE TRIGGER schemaB.my_trigger
               ON schemaA.my_table
               FOR EACH ROW
               BEGIN
               IF INSERTING THEN
                  schemaA.my_package.my_procedure (:NEW.field_A,NEW.field_B, :NEW.field_C);
               END IF;
            EXCEPTION
               WHEN OTHERS THEN
                Insert into my_log(DBMS_UTILITY.format_error_stack,sysdate);
            END my_trigger;
            /    AFTER INSERT
这个写在schemaB的my_表上的触发器正在调用Schema a中存在的过程

但是,当触发时,我的日志中出现以下错误

            ERROR: ORA-04061: existing state of package "schemaA.my_package" has been invalidated
            ORA-04065: not executed, altered or dropped package "schemaA.my_package"
            ORA-06508: PL/SQL: could not find program unit being called: "schemaA.my_package"
            ORA-06512: at "schemaB.my_trigger", line 17      10/1/2015 6:38:07 PM
schemaA中的过程也声明为PRAGMA_autonomy_事务

这是一个授权问题吗?因为我检查了所有的授权,我检查了触发器和过程的依赖关系 一切似乎都是正确的。你能帮忙吗

我曾尝试在调用包中使用Pragma serially_可重用,但仍然出现相同的错误


非常感谢

阅读此博客,了解有关错误的更多信息-


附加代码schemaA.my_包将提供更好的方法来帮助您解决问题,但如果您使用全局变量,则问题的解决方案可能就在本文中。

您可能遇到的问题是:

  • 您正在调用的包/过程无效 在“所有对象”视图中,检查此查询是否有包的条目或包中使用的对象

    从状态为'INVALID'且所有者为'SCHEMA_NAME'的所有_对象中选择*

  • 检查您的包是否包含全局变量?如果是,则检查这些变量是否未被任何其他会话更改

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

    开始 dbms_实用程序。编译_模式('schema_NAME',false); 结束

  • 最后一个选项:如果上述任何一项都不起作用,则从包中删除所有过程/函数,添加新函数并尝试从触发器运行函数。检查这是否有效,然后您的包裹处于特殊锁中。添加新函数后,其状态将再次有效,然后您可以添加所有实际的函数/过程并删除新添加的函数/过程

通过使调用包可串行重用,尝试了可能的重复,但仍然是相同的错误。请附加
schemaA.my\u包
ddl好吗?