Есть две проблемы с вашим утверждением. Вы должны понимать, как работают переменные связывания. Запрос не обрабатывается путем замены символов ?
вашими параметрами. Вместо этого оператор компилируется с заполнителями, а затем во время выполнения фактические значения параметров передаются в БД.
Другими словами, вы анализируете следующий запрос:
SELECT instance_id, :p1
FROM eam_measurement
WHERE resource_id IN (SELECT RESOURCE_ID
FROM eam_res_grp_res_map
WHERE resource_group_id = :p2)
AND DSN LIKE '?'
ORDER BY 2
Я почти уверен, что последний параметр будет проигнорирован, поскольку он находится в строке символов с разделителями. Даже если это не игнорируется, не имеет смысла иметь символы '
, потому что Oracle не будет связывать параметр в строке (я удивлен, что это не вызвало никакой ошибки, вы ловите исключения?).
Теперь, если вы замените DNS LIKE '?'
на DSN LIKE ?
и свяжете "%Module=jvmRuntimeModule:freeMemory%"
, это будет иметь смысл и должно вернуть правильные строки.
У вас все еще есть проблема с вашим первым параметром, он не будет выполнять то, что вы ожидаете, т. Е. Запрос, который будет выполнен, будет эквивалентен следующему запросу:
SELECT instance_id, 'SUBSTR(DSN,27,16)'
FROM ...
, что совсем не то же самое, что
SELECT instance_id, SUBSTR(DSN,27,16)
FROM ...
Я бы предложил синтаксический анализ (= prepareStatement) следующего запроса, если вы ожидаете, что SUBSTR будет динамическим:
SELECT instance_id, SUBSTR(DSN,?,?)
FROM eam_measurement
WHERE resource_id IN (SELECT RESOURCE_ID
FROM eam_res_grp_res_map
WHERE resource_group_id = ?)
AND DSN LIKE ?
ORDER BY 2