从 Java 调用 PL/SQL,在 setArray 操作中获取一个 UnsupportedOperationExce



我正在调用oracle PL/SQL过程,并且在Connection.createArrayOf指令中收到以下错误:

java.lang.UnsupportedOperationException at com.isb.rigel.srvcimpl.dbcon.ConnectionProxy.createArrayOf(ConnectionProxy.java:916)

这是 Java 代码:

CallableStatement cs = conexion.prepareCall(sql);
//Parametros de entrada        
cs.setString(1, uid);//p_usuario
cs.setDate(2, java.sql.Date.valueOf(fechaIni));//p_fecha_desde
cs.setDate(3, java.sql.Date.valueOf(fechaFin));//p_fecha_hasta
cs.setString(4, indMontoDesde);//p_ind_monto_desde
cs.setString(5, indMontoHasta);//p_ind_monto_hasta
cs.setBigDecimal(6, montoDesde);//p_monto_desde
cs.setBigDecimal(7, montoHasta);//p_monto_hasta
cs.setString(8, indPais);//p_ind_cod_pais
cs.setString(9, pais);//p_pais
cs.setString(10, indRefCliente);//p_ind_ref_cliente
cs.setString(11, refClienteIn);//p_ref_cliente
cs.setString(12, indNombreBenef);//p_ind_nom_benef
cs.setString(13, nombreBenef);//p_nom_benef
cs.setString(14, indCuenta);//p_ind_cuenta_debito
cs.setString(15, cuentaIn);//p_cuenta_debito
cs.setString(16, indListaMetodos);//p_ind_metodo_pago
cs.setString(17, listaMetodos.toString());//p_lista_cod_metodo_pago
cs.setString(18, "S");//p_ind_estado
String[] al = new String{"AL","AR"};
Array array = conexion.createArrayOf("varchar", al); //EXCEPTION!
cs.setArray(19, array);//p_lista_id_estado_pago
cs.setString(20, CI_IndicadorBooleano.ABR_NO);//p_ind_primera_busq
cs.setString(21, VACIO);//p_id_lote
cs.setString(22, INT_UNO);//p_order_pag
cs.setString(23, CI_IndicadorBooleano.ABR_SI);//p_asc_pagos
cs.setString(24, entrada.getLanguage().getIDIOMA_ISO().getData());//p_asc_pagos
cs.setString(25, entrada.getLanguage().getDIALECTO_ISO().getData());//p_asc_pagos
cs.registerOutParameter(26, -10);//cursor (OracleTypes.CURSOR = -10)

有人知道发生了什么吗?我做错了什么?

如果这是按表列出的 PL/SQL 索引,则应使用 setPlSqlIndexTable。

然后,您的代码将变为:

OracleCallableStatement cs=(OracleCallableStatement)conexion.prepareCall(sql);
...
String[] al = new String{"AL","AR"};
cs.setPlSqlIndexTable(19, al, al.length+1, al.length, Types.VARCHAR, 2);

最新更新