Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas Procedimiento Oracle

Estas en el tema de Problemas Procedimiento Oracle en el foro de Java en Foros del Web. Hola a todos. A ver si alguien me puede echar una manita que llevo ya cuatro dias intentando hacer funcionar esto y ya me estoy ...
  #1 (permalink)  
Antiguo 22/09/2006, 03:36
 
Fecha de Ingreso: septiembre-2006
Mensajes: 9
Antigüedad: 17 años, 7 meses
Puntos: 0
Problemas Procedimiento Oracle

Hola a todos.

A ver si alguien me puede echar una manita que llevo ya cuatro dias intentando hacer funcionar esto y ya me estoy quedando sin ideas.

Lo primero daros las gracias y ahora paso a comentaros lo que me pasa.


Tengo un procedimiento almacenado en la base de datos oracle con la siguiente cabecera.

Código:
PROCEDURE confirmarPedido(laEntidad IN SMALLINT, Serie_Pedv IN VARCHAR2, elCliente IN NUMBER, IdUsrWeb IN NUMBER, laFecha IN VARCHAR2, elAlmacen IN NUMBER, losArticulos IN VARCHAR2, lasCantidades IN VARCHAR2, laDisponibilidad IN VARCHAR2, laFechaServicio IN VARCHAR2, controlarStock IN SMALLINT, laSitucionDelPed IN NUMBER, tabla IN OUT ttabla)
El ultimo parametro es de tipo tabla, es decir lo que me devuelve es una tabla con los resultados.

Pues ahora llego a mi clase java y tengo un procedimiento con el siguiente codigo.

Código:
 /**metodo que confirmara el pedido del carrito*/
  public void confirmarPedido(cliente cli, Vector lis_carro, PrecioCarro precio)throws CException
  {
    //devolvemos el objeto usuario correspondiente a este cliente
    Usuario usu = new Usuario();
    usu = cli.getUsuario();
    
    //obtenemos la fecha del pedido
    FechaHicusa fecha = new FechaHicusa();
    
    try
    {
      conn.conectar();
      //preparamos el envio de datos al procedimiento
      CallableStatement cs = conn.preparaProcedimiento("telepack.confirmarPedido(?,?,?,?,?,?,?,?,?,?,?,?,?)");
      //preparamos los parametros necesarios
      cs.setInt("laEntidad",1);
      cs.setString("Serie_Pedv","'web'");
      cs.setInt("elCliente",Integer.parseInt(cli.getCliente()));
      cs.setInt("IdUsrWeb",Integer.parseInt(usu.getId()));
      cs.setString("laFecha","'" + fecha.dame_bd() + "'");
      cs.setInt("elAlmacen",1);
      cs.setString("losArticulos","'" + dameCadenaArticulos(lis_carro) + "'");
      cs.setString("lasCantidades","'" + dameCadenaCantidades(lis_carro) + "'");
      cs.setString("laDisponibilidad","'" + dameCadenaDisponibilidad(lis_carro) + "'");
      cs.setString("laFechaServicio","'" + fecha.dame_bd() + "'");
      cs.setInt("controlarStock",0);
      cs.setInt("laSituacionDelPed",0);
      cs.registerOutParameter("tabla",OracleTypes.CURSOR);
      
      //ejecutamos el procedimiento
      cs.execute();
      //recogemos el resultado
      ResultSet resultado = (ResultSet)cs.getObject("tabla");
      
      
    }
    catch(Exception e)
    {
      throw new CException("Clase LogicaCarro. Metodo confirmarPedido. Mensaje: "+e);
    }
  }
Lo ejecuto y todo parece que va bien, pero cuando llego a la linea de cs.execute(); pues me salta la excepcion y me da el siguiente error.

Código:
PLS-00306: número o tipos de argumentos erróneos al llamar a 'CONFIRMARPEDIDO'
ORA-06550: línea 1, columna 7:
PL/SQL: Statement ignored
Ya no se que hacer he probado todo lo que encontre por libros, manuales, internet. No se necesito algun tipo de sugerencia o algo.

Muchisimas gracias otra vez por adelantado.
  #2 (permalink)  
Antiguo 22/09/2006, 05:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
La verdad, no tengo ni idea, usando un API Propietario en vez de JDBC no sé bien como ayudarte.

Lo único, has probado a quitar las ' en las asignaciones String? quiero decir, hacer así:

cs.setString("Serie_Pedv","web");

en vez de

cs.setString("Serie_Pedv","'web'");


Sólo se me ocurre eso, y probar que el tipo ttabla de los procedimientos almacenados sea el OracleTypes.CURSOR.

Suerte!
  #3 (permalink)  
Antiguo 22/09/2006, 05:25
 
Fecha de Ingreso: septiembre-2006
Mensajes: 9
Antigüedad: 17 años, 7 meses
Puntos: 0
Hola Raiko.

Si que utilizo JDBC, no se que quieres decir con un API propietario.

Lo de las comillas ya lo probe tambien y sigue dandome el mismo error, lo que pasa que al final probe poniendolas porque como en oracle los textos tienen que ir entre '' pues dije a ver si va ser algo de eso.

Pero nada de nada.

Yo tambien creo que el error puede estar en el ultimo parametro pero hice un procedimiento muy sencillito con solo tres parametros y con uno igual de salida y lo consegui hacer funcionar pero este no puedo.

Gracias de todas formas
  #4 (permalink)  
Antiguo 22/09/2006, 06:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Con lo del API propietario quiero decir que para lanzar consultas no utilizas JDBC directamente, utilizas unas clases tuyas (aunque estas usararan JDBC obviamente).

Por ejemplo:

conn.preparaProcedimiento

ese método no es del API, y tu lo estás utilizando. Aunque luego dentro se llame a JDBC, en realidad estas programando consultas sobre funciones y métodos tuyos.

A ver si alguien te puede ayudar, un saludo.
  #5 (permalink)  
Antiguo 22/09/2006, 07:12
 
Fecha de Ingreso: septiembre-2006
Mensajes: 9
Antigüedad: 17 años, 7 meses
Puntos: 0
OK ya te entendi.

Pero ese metodo solamente prepara la cadena. Aunque si tu sabes otra forma de hacerlo lo quito y lo hago de otra forma. Ya toy tan desesperado que eso me da igual.

He modificado el procedimiento y le quite el ultimo parametro el de salida y me sigue dando el mismo error asique ahora si que me a descolocado totalmente. No se si algun tipo de dato de java es incompatible con los de oracle, porque otra cosa ya no se que puede ser.

Gracias y saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:28.