0

我需要使用参数将条件 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

有人知道吗?

4

2 回答 2

0

也许LISTAGG会帮助你

    SELECT col1
           LISTAGG(p, ',') WITHIN GROUP (ORDER BY p) AS p
    FROM   p_tgable
    WHERE  p in ('a','b','c')
    GROUP  BY
           col1;
于 2013-09-13T07:06:37.023 回答
0

可以使用嵌套表集合类型来完成。

首先声明一个自定义嵌套类型,我们将其命名为 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();
// ...
于 2013-09-13T10:10:25.120 回答