67,513
社区成员
发帖
与我相关
我的任务
分享
import java.sql.Connection;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.pool.OracleDataSource;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
public class OracleProcTest {
public static void main(String[] args) throws Exception {
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:C##test/test@localhost:1521:orcl");
Connection conn = ods.getConnection();
System.out.println(conn);
StructDescriptor a = StructDescriptor.createDescriptor("A", conn);
StructDescriptor b = StructDescriptor.createDescriptor("B", conn);
StructDescriptor c = StructDescriptor.createDescriptor("C", conn);
ArrayDescriptor varchar_array = ArrayDescriptor.createDescriptor("VARCHAR_ARRAY", conn);
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
ARRAY array = new ARRAY(varchar_array,conn,list.toArray());
Object[] n1= new Object[] {"n1", array};
Object[] n1_2= new Object[] {"n1",array};
Object[] n3= new Object[] {"n3", "n4"};
Object[] n3_4= new Object[] {"n3", "n4"};
STRUCT structa = new STRUCT(a, conn, n1);
structa.setObjArray(n1_2);
System.out.println(structa.dump());
STRUCT structb = new STRUCT(b, conn, n3);
structb.setObjArray(n3_4);
// structb.setObjArray(list.toArray());
System.out.println(structb.dump());
Object[] n= new Object[] {structa, structb};
STRUCT structc = new STRUCT(c, conn, n);
structc.setObjArray(n);
System.out.println(structc.dump());
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall(" { call test_1(?,?) }");
// cs.setSTRUCT(1, structc);
cs.setObject(1,structc);
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
System.out.println(cs.getString(2));
}
}