簡體   English   中英

PreparedStatement和Oracle 10g的bug

[英]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.

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