gpt4 book ai didi

database - ORA-04065 : not executed, 更改或删除存储过程

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:33 26 4
gpt4 key购买 nike

我在 Oracle Enterprise 12c 中有一个存储过程。该程序正在调用 100 多个子过程来截断表并重新插入 (ETL)。

Master Proc IS
BEGIN
CHILD1;
CHILD2;
CHILD3;
ETC...
END;

此过程按要求每 4 小时执行一次。问题是有时我们会遇到一些错误:

ORA-04065: 未执行、更改或删除
ORA-04065: 未执行、更改或删除存储过程“child proc1”
ORA-06508: PL/SQL: 找不到被调用的程序单元: "OD

但这似乎在下一次加载时自行解决,即使我在收到错误后重新执行程序也没有任何错误地完成。然后一段时间后我们再次使用随机存储过程收到错误,第一次是 child1 然后child2 然后是 child1。

知道如何解决或避免此错误吗?

注意:不使用包。只是独立的 sp。

最佳答案

某些东西正在使调用链中的 PL/SQL 对象(包、类型、过程、函数)无效,可能会删除并重新创建它引用的表,这会迫使运行时引擎在下一次调用时重新编译它。如果一个包有状态(全局变量或游标),那将在重新编译时丢失,所以你会得到一个 ORA-04068: existing state of packages has been discarded 错误和 ORA-04065 堆栈中的某处。

我不确定你是如何得到两个 ORA-04065 错误而没有 ORA-04068 的,正如我所期望的 ORA-04068位于顶部,例如:

SQL> exec dbms_output.put_line(ora_04065_demo.this_creates_package_state)
BEGIN dbms_output.put_line(ora_04065_demo.this_creates_package_state); END;
*
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package "WILLIAM.ORA_04065_DEMO" has been invalidated
ORA-04065: not executed, altered or dropped package "WILLIAM.ORA_04065_DEMO"
ORA-06508: PL/SQL: could not find program unit being called: "WILLIAM.ORA_04065_DEMO"
ORA-06512: at line 1

关于database - ORA-04065 : not executed, 更改或删除存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com