Ayuda con un Store de Oracle

Hola a todos de la comunidad nuevamente me encuentro con un gran problema, resulta que el Admin de Oracle me paso un Store que ejecut una consulta select. Los parametros de entrada son:

 pi_finicio     in  date,
                          pi_ffin        in  date,
                          pi_cid         in  number,
                          po_datos       out cur_ref, <-- me dicen que este es un data set
                          ps_CodResult   out number,
                          ps_TxResult    out varchar2)

y los parametros de Salida:

ID_ASOCIADO,
CID,
ID_PRODUCTO,
NOM_PRODUCTO,
F_INVENTARIO,
F_VENTA  ,

y en java lo intento llamar como los normales que hago y me queda asi:

 @WebMethod(operationName="WSPOS_PROD_NO_VENDIDOS")
         @WebResult(name = "Productos")
         public viewProductos[] ProductosNoVendidos(@WebParam(name = "datos")dtoParam dto) throws SQLException
            {          
                try
                {
                        conection();
                        CallableStatement       cStmt = con.prepareCall("begin POS.PKG_POS.stpPosMovtoInv (?,?,?,?,?); end;");
                        cStmt.setString(1, dto.getF_inicial());
                        cStmt.setString(2, dto.getF_final());
                        cStmt.setString(3, dto.getCid());
                       
                        cStmt.registerOutParameter("cur_ref", Types.VARCHAR);
                        cStmt.registerOutParameter(4, java.sql.Types.INTEGER);
                        cStmt.registerOutParameter(5, java.sql.Types.VARCHAR);
                       
                        cStmt.executeQuery();
                                       
                         ResultSet rs = cStmt.getResultSet();
                         ArrayList<viewProductos> list = new ArrayList<viewProductos>();
                                       
                         while (rs.next())
                        {
                                 viewProductos res=new viewProductos();
                                                       
                                 res.setId_producto(rs.getString("ID_ASOCIADO"));
                                 res.setId_asociado(rs.getString("CID"));
                                 res.setF_inventario(rs.getString("ID_PRODUCTO"));
                                 res.setProducto(rs.getString("NOM_PRODUCTO"));
                                 res.setCid(rs.getString("F_INVENTARIO"));
                                 res.setF_venta(rs.getString("F_VENTA"));
                                 list.add(res);
                        }
                         rs.close();
                          return (viewProductos[])list.toArray(new viewProductos[list.size()]);
                }
                catch (SQLException e)
                         {
                   e.printStackTrace();
               }
                cerrarConexion();
                return null;
            }

el error que me marca es este :

11:28:13,470 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) java.sql.SQLException: ORA-06550: l?nea 1, columna 7:
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) PLS-00306: wrong number or types of arguments in call to 'STPPOSMOVTOINV'
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) ORA-06550: l?nea 1, columna 7:
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) PL/SQL: Statement ignored

espero y me puedan ayudar. Saludos

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Re:ayuda con un store de oracle

Lee el error:

11:28:13,470 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) java.sql.SQLException: ORA-06550: l?nea 1, columna 7:
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) PLS-00306: wrong number or types of arguments in call to 'STPPOSMOVTOINV'
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) ORA-06550: l?nea 1, columna 7:
11:28:13,471 ERROR [stderr] (http-localhost-127.0.0.1-8080-2) PL/SQL: Statement ignored

Ahí te indica en que línea tienes el error, wrong number or types of arguments in call to 'STPPOSMOVTOINV', revisa el número de parámetros que estas enviando.

Imagen de Jeremias Rosales

Hola

Puedo ver que tienes 5 parametros en tu store procedure y lo invocas con 6 en el callablestatement

cStmt = con.prepareCall("begin POS.PKG_POS.stpPosMovtoInv (?,?,?,?,?);

Corrige esta linea asi:
cStmt = con.prepareCall("begin POS.PKG_POS.stpPosMovtoInv (?,?,?,?,?,?);

cStmt.setString(1, dto.getF_inicial());
cStmt.setString(2, dto.getF_final());
cStmt.setString(3, dto.getCid());

cStmt.registerOutParameter("cur_ref", Types.VARCHAR);
cStmt.registerOutParameter(4, java.sql.Types.INTEGER);
cStmt.registerOutParameter(5, java.sql.Types.VARCHAR);

Puedes utilizar OracleTypes

Para trabajar con cursores en oracle, puedes implementar la libreria OracleTypes, y declarar la variable de salida como OracleTypes.CURSOR, en vez de Types.VARCHAR

Este enlace puede ayudar

http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-curso...

Especificamente el punto numero dos

Aunque necesitarias incluir en tu proyecto el jar del driver de jdbc para oracle, que pienso que ya la tienes por lo que te puedes conectar a la base.

Suerte.