Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

error procedimiento almacenado

Estas en el tema de error procedimiento almacenado en el foro de Mysql en Foros del Web. tengo el siguiente codigo para ejecutar una simple consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original DELIMITER $$   USE `clientes` $$   DROP PROCEDURE IF ...
  #1 (permalink)  
Antiguo 05/05/2013, 17:11
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 10 años, 11 meses
Puntos: 1
error procedimiento almacenado

tengo el siguiente codigo para ejecutar una simple consulta
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. USE `clientes`$$
  4.  
  5. DROP PROCEDURE IF EXISTS `buscar_direccion_cliente`$$
  6.  
  7. CREATE DEFINER=`root`@`localhost` PROCEDURE `buscar_direccion_cliente`(
  8.   IN id  INT,
  9.  OUT codigo INT,
  10. OUT nit CHAR (13),
  11. OUT pais CHAR (40))
  12.  
  13.  
  14.  
  15. SET @consulta = CONCAT ("SELECT clientes.direccion_cliente.id_direccion,
  16.     clientes.direccion_cliente.id_cliente,
  17.     clientes.direccion_cliente.pais
  18.     INTO", codigo,",", nit,",",pais," FROM clientes.direccion_cliente
  19. WHERE clientes.direccion_cliente.id_direccion=",id);
  20.  
  21. PREPARE ejecutar FROM @consulta;
  22. EXECUTE ejecutar;
  23.  
  24.  
  25.     END$$
  26.  
  27. DELIMITER ;

pero al ejecutarla en la linea de comandos arroja el siguiente error:

ueries executed, 0 success, 1 errors, 0 warnings

Query: call buscar_direccion_cliente (2,@c,@n,@p)

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1


he buscado [URL="http://stackoverflow.com/questions/7569072/stored-procedure-error-on-call/16389956#16389956"]http://stackoverflow.com/questions/7569072/stored-procedure-error-on-call/16389956#16389956[/URL] y habia un erro parecido

pero no trataba sino de una varaible no inicializada, en este caso yo utilizo son parametros de entrada.

alguien sabe que puede estar sucediendo?

Última edición por gnzsoloyo; 05/05/2013 a las 17:50 Razón: SQL mal etiquetado
  #2 (permalink)  
Antiguo 05/05/2013, 18:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: error procedimiento almacenado

Hay al menos dos cosas que considerar:
1) Las comillas (") no funcionan en cadenas de texto en todas las instalaciones de MySQL, a menos que se modifique la configuración del servidor.
2) Las variables OUT pueden no funcionar bien si la librería usada en programación no se utiliza adecuadamente. Podrías no recuperar los datos.

En cualquier caso, o te recomiendo probarlo así:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `buscar_direccion_cliente`$$
  4.  
  5. CREATE PROCEDURE `buscar_direccion_cliente`(IN id  INT)
  6.     SET @consulta = CONCAT ('SELECT id_direccion CODIGO, id_cliente NIT, pais PAIS
  7. FROM direccion_cliente WHERE id_direccion=',id);
  8.  
  9.     PREPARE ejecutar FROM @consulta;
  10.     EXECUTE ejecutar;
  11. END$$
  12.  
  13. DELIMITER ;
Considerando que eso devolverá simplemente un registro, puedes leer el resultado sin necesidad de usar parametros OUT.
Además, como los lenguajes no te permiten ejecutar consultas sin seleccionar la base, poner la base en la consulta es innecesario (y contraproducente), así como tampoco tiene sentido indicar la tabla en los campos, si estás consultando sólo una tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: almacenado, procedimiento, select, sql
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 05:14.