我可以使用 Java 代码在 sql 语句(Oracle)的 IN 子句中传递字符串列表吗
Can I pass a list of String in the IN clause of sql statement(Oracle) using Java code
我可以使用 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 嵌套 Table 定义为:
创建或替换 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 语句一起使用吗?
测试了你的方法,它工作正常。请检查您的映射是否正确以及数据库中是否存在数据。
是的,你可以在sql语句中使用oracle数组。
How to create an oracle.sql.ARRAY object?
我可以使用 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 嵌套 Table 定义为:
创建或替换 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 语句一起使用吗?
测试了你的方法,它工作正常。请检查您的映射是否正确以及数据库中是否存在数据。
是的,你可以在sql语句中使用oracle数组。
How to create an oracle.sql.ARRAY object?