2016-09-15 54 views
0

我想为一个字符串数组传递给准备好的声明的命名参数:传递一个值给定参数

声明:

SELECT * 
FROM FOOBAR 
WHERE HOSTID IN (:hostIds) 
ORDER BY NAME; 

类型HOSTID号码

我想传递的值在我的数据库中保存为字符串, g .:'1,3,37'。 我已经尝试了各种方法,但我无法让它工作。

第一:按照原样传递此值。 问题:使用一个值('1')可以正常工作,但由于oracle将其解释为一个值('1,3') - > 1.3(?),因此不会使用多个值。

第二:创建收集,构建一个java.sql.Array并传递它。 问题::(我已经创建了一个集这样的不一致的数据类型:

CREATE OR REPLACE TYPE VARCHAR2_ARRAY IS TABLE OF VARCHAR2; 

并试图建立一个数组,并使用

statement.setArrayAtName("hostIds", value); 

但是,这也不能工作

。有什么建议吗?

回答

1

我自己找到了解决方法。我将我的声明更改为:

SELECT * 
FROM FOOBAR 
WHERE to_char(HOSTID) IN 
     (SELECT trim(regexp_substr(:hostIds, '[^,]+', 1, level)) 
     FROM dual 
     CONNECT BY regexp_substr(:hostIds, '[^,]+', 1, level) IS NOT NULL) 
ORDER BY NAME; 
相关问题