Oracle 包的现有状态已无效
我面临着这个错误 我有两个模式A和模式B 模式B包含一个表my_table,其中插入了值 在schemaB中,每行都有一个为my_表编写的触发器my_触发器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
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好吗?