Sono stato in grado di mappare una tabella dei tipi di varchar2 su java come segue:
-
Crea un nuovo tipo al di fuori di qualsiasi pacchetto PLSQL e concedi le autorizzazioni necessarie.
CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (100); / GRANT all ON MYSCHEMA.STRARRAY TO MYUSER1; / commit;
-
Crea una funzione PLSQL che accetta/restituisce lo strarray. Questo è stato dichiarato nelle specifiche del pacchetto e scritto per intero nel corpo del pacchetto. Sebbene abbia dichiarato che l'array è IN OUT, nella mia implementazione utilizzo effettivamente solo l'output della chiamata PLSQL.
PROCEDURE getArr(arr_var IN OUT strarray) IS counter NUMBER := 1; BEGIN arr_var := new strarray(); WHILE counter <= 10 LOOP arr_var.extend(); arr_var(counter) := 'my data string'; END LOOP; END getArr;
-
Chiama la procedura in java. In questo esempio la variabile conn è di tipo dati Connection ed è già stata inizializzata. Sto eseguendo un thin client jdbc su un database Oracle.
CallableStatement proc = null; String sql = "{ call myPackage.getArr(?) }"; try{ proc = conn.prepareCall(sql); proc.registerOutParameter(1, OracleTypes.Array, "MYSCHEMA.STRARRAY"); proc.execute(); Array arrOut = proc.getArray(1); for (int num=0; num<10; num++){ System.out.println(arrOut[num]); }finally{ proc.close(); }