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

como saber cuando colocar ; (punto y como) dentro de un stored procedure en mysql

Estas en el tema de como saber cuando colocar ; (punto y como) dentro de un stored procedure en mysql en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original DELIMITER $$   CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE `test` . `p25` ( OUT return_val INT ...
  #1 (permalink)  
Antiguo 03/05/2013, 21:22
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 10 años, 11 meses
Puntos: 1
Pregunta como saber cuando colocar ; (punto y como) dentro de un stored procedure en mysql

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. /*[DEFINER = { user | CURRENT_USER }]*/
  4. PROCEDURE `test`.`p25` (OUT return_val INT)
  5. /*LANGUAGE SQL
  6.     | [NOT] DETERMINISTIC
  7.     | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  8.     | SQL SECURITY { DEFINER | INVOKER }
  9.     | COMMENT 'string'*/
  10.   DECLARE a,
  11.   b INT ;
  12.   DECLARE curs_1 CURSOR FOR
  13.   SELECT
  14.     s1
  15.   FROM
  16.     t2 ;
  17.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1 ;
  18.   OPEN curs_1 ;
  19.     FETCH curs_1 INTO a ;
  20.     UNTIL b = 1
  21.   END REPEAT ;
  22.   CLOSE curs_1 ;
  23.   SET return_val = a ;
  24. END $$
  25.  
  26. DELIMITER ;

Hola a todos este es mi código, bajado de Internet, hasta el momento estoy trabajando con sp, y la pregunta es la del titulo, dado que
en la sentencia UNTIL B=1 finalizaba con un (;) y al quitarlo funciono.

Se que todas las instrucción MySQL finalizan con un ;
pero dentro de un STORED PROCEDURE como saber exactamente cuando utilizar este signo?

la tabla a la que se consulta es muy sencilla

Código MySQL:
Ver original
  1. CREATE TABLE t2 ( s1 INT );

la tabla contiene 3 datos, al recorrerla guarda el ultimo valor en la variable a;

De ante mano mil gracias.

Última edición por gnzsoloyo; 04/05/2013 a las 04:21 Razón: SQL mal etiquetado.
  #2 (permalink)  
Antiguo 06/05/2013, 06:51
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 6 meses
Puntos: 331
Respuesta: como saber cuando colocar ; (punto y como) dentro de un stored procedure

http://www.google.de/search?client=u...w=1280&bih=603
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 06/05/2013, 07:54
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: como saber cuando colocar ; (punto y como) dentro de un stored procedure

El punto y coma (;) es siempre el terminador de sentencias en MySQL. Debe ir siempre donde la sentencia termine, y el error que te sucedió es porque estaba donde no debía.
Los SP son un caso especial.
Los SP deben poder cargarse como un todo, desde el principio al final, pero como pueden contener más de una sentencia, dejar funcionando el terminador normal, genera una ruptura de la carga en el intérprete. Por eso se debe suspender su reconocimiento hasta que el script completo se ingresa. Nota que le cierre del SP es siempre el "END", por lo que el cierre del conjunto debe venir después...
Para gestionar esta contingencia se creó el "DELIMITER" comando de consola y scripts SQL cuyo único objetivo es el de permitir que el interprete tome las rutinas almacenadas sin generar errores. Nada más. No sirve para ninguna otra cosa, y no es reconocido como comando por las librerías de los lenguajes de programación, por lo que no puedes enviarlo desde PHP, VB.Net, C#.net, Java o Python...
No lo tomará.

Ahora bien, cuando usas DELIMITER, la idea es que indiques un delimitador alternativo en forma momentánea (solo para el cuerpo de la rutina a almacenar), y luego lo restaures. Se sugiere no usar caracteres que tengan significado dentro de la lógica de MySQL, para eviotar conflictos, por lo que no debes usar |, ", ', `, /, &, % o cualquier otro símbolo semejante. Fíjate que los manuales de MySQL usan siempre "$$"... por algo es.


Ahora bien, ¿cómo se puede cargar programáticamente una rutina almacenada si no se puede enviar un "DELIMITER". Fácil: mandas la rutina entera como si fuera una sentencia común y corriente. La librería es la que dispara la terminación de la sentencia, así que lo tomará todo como si fuese una sola cosa, y lo almacenará normalmente.
__________________
¿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: procedure, punto, select, sql, stored, tabla
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 08:44.