2016-09-15 7 views
0

私は準備された文の名前のパラメータに文字列の配列を渡すためにしようとしている:ORACLE文で指定されたパラメータにJavaから値を渡す

声明:

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

タイプのHOSTIDは、の番号です。

私が渡したい値は、データベースに文字列として保存されます。 g: '1、3、37'。 私はすでにさまざまなアプローチを試みてきましたが、まだ動作させることができませんでした。

まず、この値をそのまま渡します。 ( '1') - > 1.3(?)

2番目:1つの値( '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; 
関連する問題