Могу ли я передать список строк в предложении IN оператора sql (Oracle), используя код Java

Могу ли я передать список строк в предложении 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-запросы, которые я пытался выполнить:

  1. SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(?))
  2. SELECT * FROM MY_TABLE where MY_COLUMN IN (select column_value v from table(cast(? AS MY_NESTED_TABLE)))

Исключения нет, просто я не получаю данных в наборе результатов. Я видел людей, использующих этот код для работы с PL/SQL. Должен ли он работать и с оператором SQL?


person Amandeep Singh    schedule 07.09.2017    source источник


Ответы (1)


Протестировал ваш подход, и он работает нормально. Проверьте правильность сопоставления и наличие данных в базе данных.

Да, вы можете использовать массивы Oracle в операторе sql.

Как создать объект oracle.sql.ARRAY?

person mkalsi    schedule 07.09.2017