我需要使用参数将条件 IN 列表转换为字符串列表。
从:
:p_parameter in ('a','b','c')
至:
:p_parameter = (a,b,c)
例如 select kod from dual where kod in(:p_parameter)
如果输入是 :p_parameter in (a,b,c) 那么输出显示
kod
------
a
b
c
有人知道吗?
我需要使用参数将条件 IN 列表转换为字符串列表。
从:
:p_parameter in ('a','b','c')
至:
:p_parameter = (a,b,c)
例如 select kod from dual where kod in(:p_parameter)
如果输入是 :p_parameter in (a,b,c) 那么输出显示
kod
------
a
b
c
有人知道吗?
也许LISTAGG会帮助你
SELECT col1
LISTAGG(p, ',') WITHIN GROUP (ORDER BY p) AS p
FROM p_tgable
WHERE p in ('a','b','c')
GROUP BY
col1;
可以使用嵌套表集合类型来完成。
首先声明一个自定义嵌套类型,我们将其命名为 STRINGS_TYPE:
create type STRINGS_TYPE AS TABLE OF VARCHAR2(100);
然后您可以比较集合是否相等,例如这将返回 1,因为这两个集合相等:
select 1 from dual
where STRINGS_TYPE('a', 'b' , 'c' ) = STRINGS_TYPE('a', 'b', 'c')
顺序无所谓,集合相等,返回 1:
select 1 from dual
where STRINGS_TYPE( 'b','a', 'c' ) = STRINGS_TYPE('a', 'b', 'c')
这两个集合不相等,不返回任何内容:
select 1 from dual
where STRINGS_TYPE( 'x','y', 'z', 'a', 'b', 'c' ) = STRINGS_TYPE('a', 'b', 'c')
在您的代码绑定:p_parameter
参数中,如下所示:
String[] pArray = new String[]{"a", "b", "c"};
String selectSQL = "select 1 from dual where :p_parameter = STRINGS_TYPE('a', 'b', 'c')";
Connection connection = database.getConnection();
oracle.jdbc.OraclePreparedStatement preparedStatement = (oracle.jdbc.OraclePreparedStatement )connection.prepareStatement(selectSQL);
oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor("YOUR_SCHEMA.STRINGS_TYPE", connection);
oracle.sql.ARRAY pOracleARRAY = new oracle.sql.ARRAY(descriptor, connection, pArray);
preparedStatement.setARRAY(1, pOracleARRAY);
resultSet = preparedStatement.executeQuery();
// ...