MySQL - store prodecure con parametros

 
Vista:
sin imagen de perfil
Val: 10
Ha disminuido 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por sergio (8 intervenciones) el 13/09/2018 17:16:33
HOla gente
tengo la store procedure siguiente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE PROCEDURE `sp_turnos2` ( IN fechadia varchar(10),IN consultoriopa int(10))
begin
declare @mfecha varchar(10), @mconsultorio int(10);
set @mconsultorio = consultoriopa;
set @mfecha=fechadia;
SELECT CAST(hora as varchar(5)) as Hora,
MAX(case when  a.fecha = mfecha  then ltrim(rtrim(CAST(codigo AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha1,
MAX(case when  a.fecha = dateadd(day,1,mfecha)  then ltrim(rtrim(CAST(codigo AS CHAR)))+'-'+ b.descripcion else '' end)  as mfecha2,
MAX(case when  a.fecha = dateadd(day,2,mfecha)  then ltrim(rtrim(CAST(codigo AS CHAR)))+'-'+ b.descripcion else '' end)  as mfecha3,
MAX(case when  a.fecha = dateadd(day,3,mfecha)  then ltrim(rtrim(CAST(codigo AS CHAR)))+'-'+ b.descripcion else '' end)  as mfecha4,
MAX(case when  a.fecha =dateadd(day,4,mfecha)  then ltrim(rtrim(CAST(codigo AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha5
FROM turnos a
left join paciente b on b.codigo=a.codpac
group by hora
order by hora;
END;

me da error alguna ayuda Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 98
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por Yamil Bracho (40 intervenciones) el 13/09/2018 17:27:15
y cual es especificamente el error ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha disminuido 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por sergio (8 intervenciones) el 13/09/2018 17:45:09
el error es el siguiente

consulta SQL:


CREATE PROCEDURE `sp_turnos2` ( IN fechadia varchar(10),IN consultoriopa int(10))
begin
declare @mfecha varchar(10), @mconsultorio int(10)
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca '@mfecha varchar(10), @mconsultorio int(10)' en la linea 3

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por Leonardo Josué (414 intervenciones) el 13/09/2018 19:00:17
Hola Sergio:

Prueba declarar las variables por separado y sin el arroba;

1
2
3
4
declare mfecha varchar(10);
declare mconsultorio int(10);
set mconsultorio = consultoriopa;
set mfecha = fechadia;

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha disminuido 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por sergio (8 intervenciones) el 13/09/2018 19:12:36
DISCULPAME QUE TE MOLESTE NUEVAMENTE
ME DA ELSIGUIENTE ERROR

USE CONSULTORIO
CREATE PROCEDURE `selectturnos2` (IN pfecha varchar(10),IN pconsultorio int))
declare mfecha varchar(10
DECLARE mconsultorio int(10);
set mconsultorio = consultoriopa;
set mfecha = fechadia;
SELECT CAST(hora as varchar(5)) as Hora,
MAX(case when a.consultorio =@mconsultorio AND a.fecha = @mfecha then ltrim(rtrim(CAST(codpac AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha1,
MAX(case when a.consultorio =@mconsultorio AND a.fecha = dateadd(day,1,@mfecha) then ltrim(rtrim(CAST(codpac AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha2,
MAX(case when a.consultorio =@mconsultorio AND a.fecha = dateadd(day,2,@mfecha) then ltrim(rtrim(CAST(codpac AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha3,
MAX(case when a.consultorio =@mconsultorio AND a.fecha = dateadd(day,3,@mfecha) then ltrim(rtrim(CAST(codpac AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha4,
MAX(case when a.consultorio =@mconsultorio AND a.fecha =dateadd(day,4,@mfecha) then ltrim(rtrim(CAST(codpac AS CHAR)))+'-'+ b.descripcion else '' end) as mfecha5
FROM turnos a
left join pacientes b on b.codigo=a.codpac
group by hora
order by hora;

Error
consulta SQL: Documentación


USE CONSULTORIO

CREATE PROCEDURE `selectturnos2`(IN pfecha varchar(10),IN pconsultorio int))
declare mfecha varchar(10),
DECLARE mconsultorio int(10)
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca 'CREATE PROCEDURE `selectturnos2`(IN pfecha varchar(10),IN pconsultorio int))
de' en la linea 2
Y NO VEO EL ERROR, GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha disminuido 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por sergio (8 intervenciones) el 13/09/2018 19:47:08
no encuentro los errores arregla uno y aparece otro, disculpame quete moleste
te paso el script completo
y el error
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
USE
    CONSULTORIO;
CREATE PROCEDURE `selectturnos2`(
    IN pfecha VARCHAR(10),
    IN pconsultorio INT(11)
)
BEGIN
    DECLARE
        mfecha VARCHAR(10),
        mconsultorio INT;
    SET
        mconsultorio = pconsultorio INT(11);
    SET
        mfecha = DATE(pfecha);
    SELECT
        CAST(hora AS VARCHAR(5)) AS Hora,
        MAX(
            CASE WHEN a.consultorio = mconsultorio AND a.fecha = mfecha THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE ''
        END
) AS mfecha1,
MAX(
    CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 1, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE ''
END
) AS mfecha2,
MAX(
    CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 2, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE ''
END
) AS mfecha3,
MAX(
    CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 3, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE ''
END
) AS mfecha4,
MAX(
    CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 4, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE ''
END
) AS mfecha5
FROM
    turnos a
LEFT JOIN pacientes b ON
    b.codigo = a.codpac
GROUP BY
    hora
ORDER BY
    hora;
END

Error
consulta SQL: Documentación


CREATE PROCEDURE `selectturnos2`(
IN pfecha VARCHAR(10),
IN pconsultorio INT(11)
)
BEGIN
DECLARE
mfecha VARCHAR(10),
mconsultorio INT
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca '
mconsultorio INT' en la linea 7
una consulta las lineas las cuenta po cada punto y coma que pongo disculpa mi ignoracia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por Leonardo Josué (414 intervenciones) el 13/09/2018 20:33:10
Hola de nuevo sergio:

Creo que no te estás tomando el tiempo para leer con detalle lo que te puse en mi post, porque estás teniendo los mismos errores que al inicio O_o.

En mi post te dije "Prueba declarar las variables por separado y sin el arroba"

1
2
3
4
declare mfecha varchar(10);
declare mconsultorio int(10);
set mconsultorio = consultoriopa;
set mfecha = fechadia;

esto quiere decir que CADA VARIABLE TIENE QUE TENER SU PROPIO DECLARE, NO QUE LAS PONGAS EN DOS LINEAS ¬¬

Además, por copiar y pegar estás cometiendo un terrible error de sintaxis:

1
SET mconsultorio = pconsultorio INT(11);

Observa que en la parte de la derecha DEJASTE DECLARADO EL TIPO DE DATO Y LA LONGITUD ¬¬.

Lo correcto es:

1
SET mconsultorio = pconsultorio;

Finalmente, la función CAST tiene un error, ya que en MySQL no pones el tipo de dato y la longitud:

1
CAST(hora AS VARCHAR(5)) AS Hora,

Sino que utilizas la palabra reservada CHAR

https://www.w3schools.com/sql/func_mysql_cast.asp

Prueba por separado que la consulta realmente funcione antes de tratar de meterla al SP.

Si estás utilizando algún IDE de desarrollo como por ejemplo WORKBENCH, te sugiero que mejor ejecutes directamente en consola tus líneas de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
USE CONSULTORIO;
DELIMITER $$
CREATE PROCEDURE `selectturnos2`(
  IN pfecha VARCHAR(10),
  IN pconsultorio INT(11)
)
BEGIN
  DECLARE mfecha VARCHAR(10);
  DECLARE mconsultorio INT;
  SET mconsultorio = pconsultorio;
  SET mfecha = DATE(pfecha);
  SELECT
    CAST(hora AS CHAR) AS Hora,
    MAX(CASE WHEN a.consultorio = mconsultorio AND a.fecha = mfecha THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE '' END) AS mfecha1,
    MAX(CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 1, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE '' END) AS mfecha2,
    MAX(CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 2, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE '' END) AS mfecha3,
    MAX(CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 3, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE '' END) AS mfecha4,
    MAX(CASE WHEN a.consultorio = mconsultorio AND a.fecha = dateadd(DAY, 4, mfecha) THEN LTRIM(RTRIM(CAST(codpac AS CHAR))) + '-' + b.descripcion ELSE '' END) AS mfecha5
  FROM
    turnos a
  LEFT JOIN pacientes b ON b.codigo = a.codpac
  GROUP BY hora
  ORDER BY hora;
END$$
DELIMITER ;

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha disminuido 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

store prodecure con parametros

Publicado por Sergio (8 intervenciones) el 14/09/2018 01:39:36
Gracias por tu ayuda, pero tuve que cambiar algunas funciones que son para otras versiones, alguna recomendación por versiones distintas
Saludos sergio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar