.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으로 말을 많이하지만, 여기에 자바의 예입니다 수 없습니다 더 나은 방법이 알고
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' 변수입니다. 사용자 입력은 명령문 매개 변수를 통해 지정됩니다. –
@ 아담 : 당신 말이 맞아요. 아담, 바인딩을 못 봤어? ". –