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

[SOLUCIONADO] Duda en Store Procedure

Estas en el tema de Duda en Store Procedure en el foro de Mysql en Foros del Web. Muy buen día apreciados Ingenieros Tengo una base de datos Mysql Version MySQL \ MySQL Server \ bin 5.5, Este Sp me funciona Perfecto Sin ...
  #1 (permalink)  
Antiguo 30/10/2013, 08:56
 
Fecha de Ingreso: octubre-2013
Mensajes: 34
Antigüedad: 10 años, 5 meses
Puntos: 0
Duda en Store Procedure

Muy buen día apreciados Ingenieros
Tengo una base de datos Mysql Version
MySQL \ MySQL Server \ bin 5.5,

Este Sp me funciona Perfecto Sin Ponerle Begin y end
Pero cuando le pongo la Instruccion Begin antes del Select
me Genera un error y no lo puedo guardar

alguien tiene una amable respuesta para esto


Código MySQL:
Ver original
  1. CREATE   PROCEDURE MARCACIONES (IN  fecha1 DATE,fecha2 DATE)          
  2.   SELECT
  3.   empre.nombre_razonsocial  ,
  4.   e.fecha                   ,
  5.   CONCAT(p.Apellidos,'-',p.Nombres) AS Nombres,
  6.   p.Documento               ,
  7.   e.fecha_Entrada           ,
  8.   e.fecha_Salida_Almuerzo   ,
  9.   e.fecha_Entrada_Almuerzo  ,  
  10.  
  11.   TIMEDIFF(e.fecha_Entrada_Almuerzo,e.fecha_Salida_Almuerzo) AS 'Total_Receso',
  12.  
  13.   e.fecha_Salida AS 'Salida_Laboral',
  14.  
  15.   TIMEDIFF(e.fecha_Salida,e.fecha_Entrada) AS 'Total_Labor',
  16.  
  17.   e.Fecha_Ultimo_Registro  AS 'Ultima_Marcacion'
  18.  
  19.     FROM  eventos e JOIN personas p ON (e.id_ser = p.id_ser)
  20.       JOIN  personas_empresa ps ON (ps.id_ser=p.id_ser)
  21.       JOIN  empresas empre ON (empre.id_empresa=ps.id_empresa)                  
  22.       AND e.fecha BETWEEN fecha1 AND fecha2
  23.      
  24.       ORDER BY  p.Nombres,e.fecha asc
  25.       LIMIT 2000
de Antemano muchas gracias por su Colaboracion
Cordial saludo

Última edición por gnzsoloyo; 30/10/2013 a las 09:07
  #2 (permalink)  
Antiguo 30/10/2013, 09:17
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: Duda en Store Procedure

Las instrucciones BEGIN/END se usan en el caso de rutinas almacenadas que tienen más de una sentencia. No son obligatorias para crearlas si son sentencias únicas, y por eso no te da error al omitirlas en este caso.
Ahora bien, por buenas prácticas es conveniente usarlas, pero como son son sentencias de SQL normales, no se pueden dejar abiertas, y cerrar las sentencias con ";" genera un error.
Cuando se usa BEGIN/END, debe realizarse un cambio de delimitador de sentencias momentáneo, cosa que se puede realizar por interfaz, o por consola, según sea el modo en que estés cargando el código en cuestión. Para eso existe el comando DELIMITER.
Si usas el editor de rutinas de MySQL Workbench, no deberías tener problemas, porque esa interfaz pone internamente (transparente para ti), los comandos DELIMITER correspondientes.
Si lo realizas por phpMyadmin, debes indicar el delimitador de sentencias en un textbox para ello.
SI lo haces por consola, o por script, debes hacerlo a mano...
El código quedaría así:
Código MySQL:
Ver original
  1. #Cambia el delimitador momentaneamente
  2. DELIMITER $$
  3. CREATE PROCEDURE MARCACIONES (IN  fecha1 DATE, fecha2 DATE)          
  4.   SELECT
  5.       empre.nombre_razonsocial,
  6.       e.fecha,
  7.       CONCAT(p.Apellidos,' - ',p.Nombres) Nombres,
  8.       p.Documento,
  9.       e.fecha_Entrada,
  10.       e.fecha_Salida_Almuerzo,
  11.       e.fecha_Entrada_Almuerzo,  
  12.       TIMEDIFF(e.fecha_Entrada_Almuerzo,e.fecha_Salida_Almuerzo) Total_Receso,
  13.       e.fecha_Salida Salida_Laboral,
  14.       TIMEDIFF(e.fecha_Salida,e.fecha_Entrada) Total_Labor,
  15.       e.Fecha_Ultimo_Registro  Ultima_Marcacion
  16.     FROM  eventos e
  17.       INNER JOIN personas p ON e.id_ser = p.id_ser
  18.       INNER JOIN  personas_empresa ps ON ps.id_ser = p.id_ser
  19.       INNER JOIN  empresas empre ON empre.id_empresa = ps.id_empresa
  20.     WHERE e.fecha BETWEEN fecha1 AND fecha2
  21.     ORDER BY  p.Nombres,e.fecha ASC
  22.     LIMIT 2000;
  23. END$$
  24.  
  25. #Restaura el delimitador
  26. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/10/2013, 10:03
 
Fecha de Ingreso: octubre-2013
Mensajes: 34
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Duda en Store Procedure

Dios todopoderoso te Bendiga Muchas gracias por tu Grandiosa Explicación
Funciona de maravilla

Utilizo el Editor de Bases de Datos SqlYog Ultimate V8.61

Que por confort me ha parecido muy Bueno

Tendre en cuenta tu consejo

Cordial saludo
Beimar Trujillo
Desde Bogota Colombia

Etiquetas: join, procedure, registro, select, sql, store
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:07.