Могу ли я передать список строк в предложении IN оператора sql (Oracle 12c), используя код Java.
Мой код приведен ниже:
Connection con= abc.getConnection();
OracleConnection oracleConnection = null;
OraclePreparedStatement ops=null;
if (con.isWrapperFor(OracleConnection.class)){
oracleConnection= con.unwrap(OracleConnection.class);
}else{
// recover, not an oracle connection
}
PreparedStatement ps=oracleConnection.prepareStatement(sql);
if (ps.isWrapperFor(OraclePreparedStatement.class)){
ops= ps.unwrap(OraclePreparedStatement.class);
}else{
// recover, not an oracle connection
}
List<String >Ids=new ArrayList<String>();
Ids.add("12345");
Ids.add("12346");
java.sql.Array array1 = oracleConnection.createOracleArray("MY_NESTED_TABLE", Ids.toArray());
ops.setArray(1, array1 );
ResultSet rSet= ops.executeQuery();
Я определил свою вложенную таблицу Oracle как:
создать или заменить TYPE MY_NESTED_TABLE AS TABLE OF VARCHAR2(8 BYTE);
И SQL-запросы, которые я пытался выполнить:
SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(?))
SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(cast(? AS MY_NESTED_TABLE)))
Исключения нет, просто я не получаю данных в наборе результатов. Я видел людей, использующих этот код для работы с PL/SQL. Должен ли он работать и с оператором SQL?