私は.NETの観点から話すことはできませんが、私はJavaコードで同様の問題を抱えています。おそらく、この解決策はいくつかの使用になります...
要素のコレクションを格納できるデータベースに新しいTYPE
を作成することから始めます。
CREATE TYPE my_array_type IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
あなたはその後、タイプMY_ARRAY_TYPE
のパラメータを受け入れることができるプロシージャを作成します:私は、一般的にTABLE
タイプを使用
CREATE PROCEDURE process_array(my_array MY_ARRAY_TYPE) IS
i BINARY_INTEGER;
my_array_element NUMBER;
BEGIN
i := my_array.FIRST;
WHILE my_array.EXISTS(i) LOOP
my_array_element := my_array(i);
/* do something with my_array_element... */
i := my_array.NEXT(i);
END LOOP;
END;
次のトリックを動的にあなたの中で無名PL/SQLブロックを構築することですプログラミング言語を選択して(私はVB.NETやC#を想定しています)、実行してください。私は.NETに多くを話すが、ここでは、Javaの例であることはできません。
int[] myArray = ...;
StringBuilder plsql = new StringBuilder();
plsql.append("DECLARE");
plsql.append(" my_array MY_ARRAY_TYPE;");
plsql.append("BEGIN");
for (int i = 0; i < myArray.length; i++) {
plsql.append(" my_array(" + i + ") := ?;");
}
plsql.append(" PROCESS_ARRAY(my_array);");
plsql.append("END");
CallableStatement statement = connection.prepareCall(plsql.toString());
for (int i = 0; i < myArray.length; i++) {
statement.setInt(i + 1, myArray[i]);
}
statement.execute();
特にジャワ/ JDBCの世界でどこ唯一、私はより良い方法がある知っているが、これは最も信頼性の高いように見えましたOracleのJDBCドライバ(!)のすべてのサブセットがコレクション型をサポートしています。
ユーザー入力を連結しますか?それはどこで行うのですか?唯一の連結は 'i'変数です。ユーザの入力は、文パラメータを介して割り当てられます。 –
@アダム:あなたは正しいですアダム、私はバインドが見えませんでしたか? " –