MySQL - Error en SP

 
Vista:

Error en SP

Publicado por Antonio Mateo (1 intervención) el 12/06/2012 22:28:42
Buen dia gente Linda!!!
Estoy teniendo un problema con un Sp de Mysql.
el problema es que cuando ejecuto el sp la linea 70 (Limit inicio,fin;) emite un error... ya me fije y re fije si hay algun otro problema y nada.. es mas.. llegue a comentar esa linea para ver si hay algun problema... y comentando esa linea funciona de lo mas bien... pero con ella da error, ya revise documentacion de mysql y segun lo que vi, la sentencia es la correcta...
Acudo a los expertos para ver si me dan una ayuda con esto que la verdad estoy ya varios dias con la lucha esta....

Dejo el codigo completo para que lo puedan analizar.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
--
-- Definition of procedure `a_consulta_amigos`
--
 
DROP PROCEDURE IF EXISTS `a_consulta_amigos`;
 
DELIMITER $$
 
/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE, SQL_MODE='' */ $$
CREATE  PROCEDURE `a_consulta_amigos`(
               IN usuarioencriptado varchar(50),
               IN filtro varchar(1),
               IN inicio INT,
               IN fin INT
)
BEGIN
 
DECLARE usuariodesencriptado bigint;
select idusuario into usuariodesencriptado from usuarios where encriptado = usuarioencriptado;
 
if (inicio = '' and fin = '')
then
 
  if (filtro != '')
      then
 
        SELECT usr.idusuario,usr.nombre,usr.apellido,am.valor,am.fecha,
				Case (select valor from amigos where idusuario1 = usuariodesencriptado and idusuario2=am.idusuario2)
					when '1' then usr.publico
					when '2' then usr.personal
					when '3' then usr.profesional
					when '4' then usr.profesional
					when '5' then usr.publico
					when '6' then usr.personal
					when '7' then usr.publico
					else usr.publico end as foto, encriptado
				FROM `amigos` am
				INNER JOIN usuarios usr on (usr.idusuario = am.idusuario2)
				INNER JOIN configuraciones conf ON (usr.idusuario = conf.idusuario)
				WHERE idusuario1 = usuariodesencriptado and usr.nombre like CONCAT(filtro,"%");
 
  else
 
        SELECT usr.idusuario,usr.nombre,usr.apellido,am.valor,am.fecha,
				Case (select valor from amigos where idusuario1 = usuariodesencriptado and idusuario2=am.idusuario2)
					when '1' then usr.publico
					when '2' then usr.personal
					when '3' then usr.profesional
					when '4' then usr.profesional
					when '5' then usr.publico
					when '6' then usr.personal
					when '7' then usr.publico
					else usr.publico end as foto, encriptado
				FROM `amigos` am
				INNER JOIN usuarios usr on (usr.idusuario = am.idusuario2)
				INNER JOIN configuraciones conf ON (usr.idusuario = conf.idusuario)
				WHERE idusuario1 = usuariodesencriptado;
  end if;
 
else
 
  if (filtro != '')
      then
 
        SELECT usr.idusuario,usr.nombre,usr.apellido,am.valor,am.fecha,
				Case (select valor from amigos where idusuario1 = usuariodesencriptado and idusuario2=am.idusuario2)
					when '1' then usr.publico
					when '2' then usr.personal
					when '3' then usr.profesional
					when '4' then usr.profesional
					when '5' then usr.publico
					when '6' then usr.personal
					when '7' then usr.publico
					else usr.publico end as foto, encriptado
				FROM amigos am
				INNER JOIN usuarios usr on (usr.idusuario = am.idusuario2)
				INNER JOIN configuraciones conf ON (usr.idusuario = conf.idusuario)
				WHERE idusuario1 = usuariodesencriptado and usr.nombre like CONCAT(filtro,"%")
LIMIT inicio, fin;
 
  else
 
        SELECT usr.idusuario,usr.nombre,usr.apellido,am.valor,am.fecha,
				Case (select valor from amigos where idusuario1 = usuariodesencriptado and idusuario2=am.idusuario2)
					when '1' then usr.publico
					when '2' then usr.personal
					when '3' then usr.profesional
					when '4' then usr.profesional
					when '5' then usr.publico
					when '6' then usr.personal
					when '7' then usr.publico
					else usr.publico end as foto, encriptado
				FROM `amigos` am
				INNER JOIN usuarios usr on (usr.idusuario = am.idusuario2)
				INNER JOIN configuraciones conf ON (usr.idusuario = conf.idusuario)
				WHERE idusuario1 = usuariodesencriptado
        Limit  inicio, fin;
 
  end if;
 
end if;
 
END $$
/*!50003 SET SESSION SQL_MODE=@TEMP_SQL_MODE */  $$
 
DELIMITER ;
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

Error en SP

Publicado por Gonzalo GC (339 intervenciones) el 17/06/2012 17:05:08
LIMIT no admite el uso de variables como parámetros. Sólo acepta números reales (1, 2, 56, 1298, lo que sea).
Para hacer lo que quieres deberías usar prepared sentences (sentencias preparadas), que no es lo que estás hacendo.
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