//获得connection java
OracleDataSource ods = new OracleDataSource(); 数组
ods.setURL("jdbc:oracle:thin:apps/apps@10.70.42.106:11501:zjprd"); oracle
Connection conn = ods.getConnection(); app
//此处PER_ABSENCE_ATTENDANCES_OBJ为存储过程定义的输入参数对象 dom
StructDescriptor sd = StructDescriptor.createDescriptor("PER_ABSENCE_ATTENDANCES_OBJ", conn); spa
//此处的obj为根据要出入的oracle参数对象,实例化的一个java对象数组 如:Object[] obj = new Object[]{new Timestamp(),"hahaha",new Integer(1)} 对象
STRUCT perAbsenceAttendancesObj = new STRUCT(sd, conn, obj); ip
//这里代码的做用是把“解释”完的java对象进一步解释为“oracle数组对象” get
ArrayDescriptor ad = ArrayDescriptor.createDescriptor("PER_ABSENCE_ATTENDANCES_TAB", conn); io
ARRAY perAbsenceAttendancesTab = new ARRAY(ad, conn, new STRUCT[] {perAbsenceAttendancesObj});
//调用存储过程
CallableStatement cs = conn.prepareCall("{ call erp_hr_absence_attendances.emp_absence_attendances(?,?,?,?,?,?,?,?,?,?,?,?,?) }");
//根据存储过程的输入参数依次传入输入参数
cs.setString(1, "LEI");
cs.setString(2, "ERP_LE_I_00001");
cs.setString(3, "1");
cs.setLong(4, Math.round(Math.random()*100000)); //正整数,由外围系统提供惟一值流水号
cs.setString(5, requestTime); //当前时间
cs.setString(6, "ERP内部调用");
cs.setLong(7, 8455l);
cs.setLong(8, 23991l);
cs.setArray(9, perAbsenceAttendancesTab);
//注册输出参数
cs.registerOutParameter(10,OracleTypes.INTEGER);
cs.registerOutParameter(11,OracleTypes.VARCHAR);
cs.registerOutParameter(12,OracleTypes.INTEGER);
cs.registerOutParameter(13,OracleTypes.ARRAY,"ERP_INTERFACE_LOG_TAB");//这里须要注意ERP_INTERFACE_LOG_TAB为存储过程返回的数组对象
cs.execute();
conn.close();
//特别注意,就算你不须要对象返回值和通常的返回值(哈哈,就是返回值啦),只要存储过程有返回值就必须注册,返回的对象存储过程参数必须带名字注册
不须要返回值 cs.execute();
须要返回值 ResultSet rs = cs.executeQuery(); 循环rs获得返回结果,用rs.getString() rs.getArray()等方法获取返回值