我正在尝试将字符串数组传递给预准备语句的命名参数:
说明:
SELECT *
FROM FOOBAR
WHERE HOSTID IN (:hostIds)
ORDER BY NAME;
HOSTID 的类型是 Number 。
我要传递的值在我的数据库中保存为字符串,e。 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);
但这也不起作用。
有什么建议吗?
答案 0 :(得分: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;