Không sử dụng Mảng liên kết - sử dụng Bộ sưu tập:
CREATE TYPE StringArray IS TABLE OF VARCHAR2(4000);
CREATE TYPE CLOBArray IS TABLE OF CLOB;
Sau đó, bạn có thể làm:
public void testString(Connection connection) {
String[] values = { "alpha", "beta", "gamma" };
try {
OracleConnection oc = (OracleConnection) connection;
ARRAY stringArray = oc.createARRAY( "STRINGARRAY", values ); // Upper case identifier
OracleCallableStatement st = (OracleCallableStatement) oc.prepareCall(
"begin test.upper( :in_array, :out_array ); end;"
);
st.setARRAYAtName( "in_array", stringArray );
st.registerOutParameter( "out_array", Types.ARRAY, "STRINGARRAY"); // Upper case again
st.execute();
String[] result = (String[])st.getARRAY( 2 ).getArray();
System.out.println("Length: " + result.length);
System.out.println("First: " + result[0]);
} (catch SQLException e) {
// Handle error
}
}
Nếu bạn phải sử dụng mảng liên kết PL / SQL làm đầu vào cho thủ tục của mình thì hãy viết một hàm nhận một tập hợp và xuất ra một mảng kết hợp có kiểu thích hợp và sau đó gọi hàm đó:
BEGIN TEST.UPPER( TO_ASSOC_ARRAY( :in_collection ), :out_array ); END;
Lưu ý:Câu trả lời này giả sử sử dụng trình điều khiển Oracle trong ojdbc6.jar mà dường như không có OracleConnection.createOracleArray()
nhưng hy vọng nó sẽ có thể thay đổi được oracle.sql.ARRAY
tới java.sql.Array
và sử dụng các phương pháp mới hơn.