2016-09-15 79 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;