gpt4 book ai didi

oracle - 编译成功后,首次调用存储过程失败。甲骨文10克

转载 作者:行者123 更新时间:2023-12-04 02:20:26 25 4
gpt4 key购买 nike

我安装了 Oracle 10G(Oracle 数据库 10g 企业版 10.2.0.3.0 - 生产版),以及一个通过 JDBC 连接调用 oracle 中的存储过程和函数的 java web 应用程序。 SP 和功能是包的一部分。第一次调用 SP 或函数时,在成功编译包后,出现以下错误:

(我用“#schema-name#.#package-name#”替换了我们的架构名称和包名称)

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

就在下一次调用时,一切都按应有的方式运行。关于为什么以及如何避免这种情况发生的任何想法?

最佳答案

这是具有状态的包的正常行为,即它们具有主体变量。编译包时,现有状态必须被丢弃,并且所有之前使用过该包的 session 都会收到 ORA-04068 错误(编译包的 session 除外)。

由于您有一个 Web 应用程序,我假设它使用一个连接池来保持 session 处于事件状态。因此,如果他们之前使用过该软件包,他们都会受到影响。

一种解决方法是调用 DBMS_SESSION.RESET_PACKAGE,它会丢弃当前 session 的所有包的状态。另一个是检查是否可以摆脱 session 状态,这与连接池结合使用有点问题。

关于oracle - 编译成功后,首次调用存储过程失败。甲骨文10克,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7985530/

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