stored ejecutar desde array java oracle plsql

array - ejecutar stored procedure oracle desde java



¿Cómo pasar la Lista de Java al Procedimiento de Oracle? (1)

Convierta sus listas en una matriz multidimensional y luego puede hacer algo como:

Configuración de Oracle :

CREATE TYPE stringlist AS TABLE OF VARCHAR2(100); / CREATE TYPE stringlist_list AS TABLE OF stringlist; / CREATE TYPE stringlist_list_list AS TABLE OF stringlist_list; / CREATE PROCEDURE load_list ( in_list IN stringlist_list_list ) AS BEGIN NULL; -- Do something with the list END; /

Java :

import java.sql.Connection; import java.sql.DriverManager; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import oracle.jdbc.OracleCallableStatement; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; public class TestDatabase2 { public static void main(String args[]){ try{ Class.forName("oracle.jdbc.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","username","password"); // Convert your lists to arrays using #toArray( T[] ) String[] l1 = { "Math", "Physics" }; String[] l2 = { "English", "Spanish" }; String[] l3 = { "French", "German" }; ARRAY school = new ARRAY( des, con, newString[][][]{ new String[][]{ l1, l3 }, new String[][]{ l2, l3 } } ); ArrayDescriptor des = ArrayDescriptor.createDescriptor("STRINGLIST_LIST_LIST", con); CallableStatement st = con.prepareCall("{ call add_school( :school )}"); // Passing an array to the procedure - ((OracleCallableStatement) st).setARRAYAtName( "school", school ); st.execute(); } catch(ClassNotFoundException | SQLException e) { System.out.println(e); } } }

Quiero enviar una lista de Java al procedimiento de Oracle. Por ejemplo, hay una escuela y la escuela tiene una lista de estudiantes. Además, los estudiantes tienen una lista de conferencias. Creo una lista de conferencias, y una lista de estudiantes que tiene la lista de conferencias, y una escuela tiene una lista de los estudiantes.

Las conferencias

ArrayList<String> lecture1 = new ArrayList<String>(); lecture1.add("Mat"); lecture1.add("physics"); ArrayList<String> lecture2 = new ArrayList<String>(); lecture2.add("English"); lecture2.add("Spanish"); ArrayList<String> lecture3 = new ArrayList<String>(); lecture3.add("Germany"); lecture3.add("French");

La lista de conferencias.

ArrayList<ArrayList<String>> lectureList1 = new ArrayList<ArrayList<String>>(); lectureList1.add(lecture1); lectureList1.add(lecture3); ArrayList<ArrayList<String>> lectureList2 = new ArrayList<ArrayList<String>>(); lectureList2.add(lecture2); lectureList2.add(lecture3);

Y la lista de estudiantes que tienen conferencias.

ArrayList<ArrayList<String>> StudentList = new ArrayList<ArrayList<String>>(); StudentList.addAll(lectureList2); StudentList.addAll(lectureList2); ArrayList<ArrayList<String>> StudentList2 = new ArrayList<ArrayList<String>>(); StudentList2.addAll(lectureList1); StudentList2.addAll(lectureList2);

Y la escuela

ArrayList<ArrayList<ArrayList<String>>> school = new ArrayList<ArrayList<ArrayList<String>>>(); school.add(StudentList2); school.add(StudentList);

Quiero enviar " escuela " a un procedimiento de oráculo. Sin embargo, no pude enviar una lista directamente. La biblioteca de Oracle permite enviar una matriz, pero quiero enviar la lista.

¿Cómo puedo hacer esta operación? Usted me podría ayudar.

Gracias.