Я работаю с подготовленным оператором Java, который получает данные из базы данных Oracle. Из-за некоторых проблем с производительностью запрос использует «виртуальный столбец» в качестве индекса.
Запрос выглядит так:
String status = "processed";
String customerId = 123;
String query = "SELECT DISTINCT trans_id FROM trans WHERE status = " + status + " AND FN_GET_CUST_ID(trans.trans_id) = " + customerId;
Connection conn = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(query);
ps.execute();
...
} catch (...)
Это не работает. Наличие функции как части предложения where вызывает SQLException. Я знаю о CallableStatement и знаю, что могу сначала использовать его, а затем объединить результаты. Однако эта таблица использует FN_GET_CUST_ID(trans_id) как часть своего индекса. Есть ли способ использовать подготовленный оператор с функцией базы данных в качестве параметра запроса?