首页 \ 问答 \ PreparedStatement和Oracle 10g错误(PreparedStatement and Oracle 10g bug)

PreparedStatement和Oracle 10g错误(PreparedStatement and Oracle 10g bug)

当我们在Java Web应用程序中调用某些SQL时,我遇到了一个很大但INTERMITTENT问题,它带有Oracle 10g中的一个错误。 我们无法快速修补或升级到11g--这似乎是第一个“愚蠢”的Oracle支持响应。 有一种解决方法,但是我在Java代码中的PreparedStatements内部执行此操作时遇到问题。

实际的错误是:

ORA-00600: internal error code, arguments: [kcblasm_1]

错误是:Oracle错误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?

不是最好的时间来与圣诞迫近和减少支持等等,所以我真的希望有人可以提供帮助。 谢谢。

编辑 :@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

I have a big but INTERMITTENT problem with a bug in Oracle 10g when we call some SQL within a Java web application. We can't quickly patch or upgrade to 11g - which seems to be the first 'stupid' oracle support response. There is a work around, but I am having trouble doing this within PreparedStatements within my Java code.

The actual error is:

ORA-00600: internal error code, arguments: [kcblasm_1]

The bug is: Oracle Bug 12419392

The work around is running

alter session set "_hash_join_enabled" = FALSE;

before we run our bug-inducing SQL. However, traditionally a PreparedStatement takes in one single piece of SQL:

PreparedStatement stmt = con.prepareSelect("sql statement2");

Is it possible to have one PreparedStatement call that looks like this:

PreparedStatement stmt = con.prepareSelect("sql statement1; sql statement2;");

Or is this possible just by running a series of sequential PreparedStatements one after the other?

Not the best time to be getting this with Xmas looming and reduced support etc. etc., so I really hope someone can help. Thanks.

Edit: @jonearles asked for the code, so here it is, if it's on any use. Probably very specific to our project, but someone might spot the glaring bug-inducing issue:

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

原文:https://stackoverflow.com/questions/8444702
更新时间:2022-03-06 13:03

最满意答案

你可以通过反思来调用它

var method = typeof(MockRepository).GetMethod("GenerateMock").MakeGenericMethod(semiknown.FieldType);
var mock_semiknown = method.Invoke(null, null);

You can call it by reflection

var method = typeof(MockRepository).GetMethod("GenerateMock").MakeGenericMethod(semiknown.FieldType);
var mock_semiknown = method.Invoke(null, null);

相关问答

更多