将值从java传递到oracle语句中的命名参数

时间:2016-09-15 10:41:33

标签: sql oracle java-8 oracle11gr2

我正在尝试将字符串数组传递给预准备语句的命名参数:

说明:

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);

但这也不起作用。

有什么建议吗?

1 个答案:

答案 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;