[英]PreparedStatement and Oracle 10g bug
當我們在Java Web應用程序中調用某些SQL時,我對Oracle 10g中的錯誤有一個很大但是間歇性的問題。 我們無法快速修補或升級到11g - 這似乎是第一個'愚蠢'的oracle支持響應。 有一個解決方法,但我在Java代碼中的PreparedStatements中執行此操作時遇到了麻煩。
實際錯誤是:
ORA-00600: internal error code, arguments: [kcblasm_1]
錯誤是:Oracle Bug 12419392
工作正在進行中
alter session set "_hash_join_enabled" = FALSE;
在我們運行我們的錯誤誘導SQL之前。 但是,傳統上PreparedStatement只需要一個SQL:
PreparedStatement stmt = con.prepareSelect("sql statement2");
是否可以有一個看起來像這樣的PreparedStatement調用:
PreparedStatement stmt = con.prepareSelect("sql statement1; sql statement2;");
或者只是通過一個接一個地運行一系列連續的PreparedStatements來實現這一點?
不是最好的時間與Xmas迫近和減少支持等等,所以我真的希望有人可以提供幫助。 謝謝。
編輯 :@jonearles要求代碼,所以這里是,如果有任何用途。 可能對我們的項目非常具體,但有人可能會發現明顯的錯誤誘導問題:
SELECT DISTINCT qm.validator_id,
qm.QM_ID,
u.EMAIL,
qm.creation_dt,
qm.emailed,
qm.valid,
qm.resolved,
qm.new_obs_id,
o.*,
nests.*,
s.*,
l.*,
latc.TENKM
FROM query_man qm,
obs o,
obs_aux_aon nests,
sub s,
location l,
l_atlas_tetrad_coverage latc,
users u
WHERE qm.OBS_ID = o.OBS_ID
AND o.SUB_ID = s.SUB_ID
AND u.user_id = qm.user_id
AND o.obs_id = nests.obs_id(+)
AND s.LOC_ID = l.LOC_ID
AND latc.ATLAS_REGION = 'NKNE'
AND (LENGTH (l.gridref) = 6
AND (SUBSTR(l.gridref,1,3)
|| SUBSTR(l.gridref,5,1)) = latc.TENKM
OR LENGTH (l.gridref) = 4
AND l.gridref = latc.TENKM)
AND qm.RESOLVED IS NULL
ORDER BY latc.tenkm,
l.tetrad
好。 我的主要問題的答案是否定的,您不能像這樣創建PreparedStatement:
PreparedStatement stmt = con.prepareSelect("sql statement1; sql statement2;");
運行單個語句暫時改變會話以獲得一點SQL確實有效,但是同意似乎很糟糕,而且響應速度也慢得令人無法接受。 選項似乎是補丁或升級,或查看no_use_hash提示(我認為也會很慢)。 請看代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.