将值从 java 传递给 oracle 语句中的命名参数
Passing a value from java to a named parameter in an oracle statement
我正在尝试将字符串数组传递给准备好的语句的命名参数:
声明:
SELECT *
FROM FOOBAR
WHERE HOSTID IN (:hostIds)
ORDER BY NAME;
HOSTID的类型是编号。
我要传递的值在我的数据库中保存为字符串,e。例如:“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);
但这也没有用。
有什么建议吗?
我自己找到了解决方法。我将声明更改为:
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;
我正在尝试将字符串数组传递给准备好的语句的命名参数:
声明:
SELECT *
FROM FOOBAR
WHERE HOSTID IN (:hostIds)
ORDER BY NAME;
HOSTID的类型是编号。
我要传递的值在我的数据库中保存为字符串,e。例如:“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);
但这也没有用。
有什么建议吗?
我自己找到了解决方法。我将声明更改为:
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;