Не използвайте асоциативен масив - използвайте колекция:
CREATE TYPE StringArray IS TABLE OF VARCHAR2(4000);
CREATE TYPE CLOBArray IS TABLE OF CLOB;
След това можете да направите:
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
}
}
Ако трябва да използвате PL/SQL асоциативен масив като вход за вашата процедура, тогава напишете функция, която взема колекция и извежда асоциативен масив от подходящия тип и след това извикайте това:
BEGIN TEST.UPPER( TO_ASSOC_ARRAY( :in_collection ), :out_array ); END;
Забележка:Този отговор предполага използването на драйвера на Oracle в ojdbc6.jar, който изглежда няма OracleConnection.createOracleArray()
метод, но да се надяваме, че ще бъде преносим, променяйки oracle.sql.ARRAY
към java.sql.Array
и използвайки по-новите методи.