簡體   English   中英

在PLSQL代碼更改后,從Java返回SQLException的存儲過程調用

[英]Stored Procedure call from Java returning SQLException after PLSQL code changes

我正在使用JDBC調用存儲過程,並且該連接在Oracle Web Logic Server 12c中配置為UCP 以下是我的示例代碼片段。

String query = "{? = call PACK_GLOBAL_VARIABLES.getBatchDate()};
CallableStatement cs = connection.prepareCall(query);
cs.registerOutParameter(1, Types.DATE);
cs.executeUpdate();

問題是,每當PL / SQL端有任何代碼更改時,我總是會收到此異常:

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

通過以下兩種方法之一可以解決此問題:

  1. 重新啟動Web Logic Server
  2. 多次編譯PL / SQL程序包(無需重新啟動Web Logic)

在生產環境中,以上兩種方法均不可行。 任何人都可以幫助您確定此問題和可能的解決方案嗎?

在應用程序運行時重建軟件包不是一個好習慣。

看來oracle和java應用程序的預期行為。

兩種可能的解決方案:

  1. 重建軟件包后更改系統刷新共享池,對數據庫有潛在的風險
  2. 在Java代碼中捕獲錯誤代碼,如果錯誤代碼為4068,請重新執行程序包

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM