【发布时间】:2018-02-16 01:39:40
【问题描述】:
我可以使用 Java 代码在 sql 语句(Oracle 12c)的 IN 子句中传递字符串列表吗?
我的代码如下:
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 语句一起使用吗?
【问题讨论】:
标签: java sql oracle12c nested-table oracle-type