SP (funciones)
Publicado por Efren (3 intervenciones) el 09/02/2005 05:21:12
Hola,
Me he tropezado con un problema en las funciones de la version 5, tengo esta funcion:
create function f_get(p_u int(10),
p_m tinyint(3))
returns tinyint(3)
begin
declare v_tempdata tinyint(3) default 0;
declare v_percent tinyint(3) default 10;
declare c_m cursor for
select 1 from srchm m
where m.idu =p_u and m.idm =p_m limit 1;
declare continue handler for not found set v_percent =v_percent -1;
open c_m;
fetch c_m into v_tempdata;
close c_m;
return v_percent;
end
y obtengo estos resultados, suponiendo q la tabla "srchm " tiene como valores idu =2, idm =5:
--------------------------------------
mysql> select f_getcomppers(2,5);
+---------------------------+
| f_getcomppers(2,5) |
+---------------------------+
| 1 | (deberia retornar 10, no el uno de la select.
+---------------------------+
1 row in set (0.08 sec)
mysql> select f_getcomppers(2,1212);
+--------------------------------+
| f_getcomppers(2,1212) |
+--------------------------------+
| 9 | (este esta bien, se dispara el handler y decrementa
+--------------------------------+
1 row in set (0.00 sec)
mysql> select f_getcomppers(2,5), 'otro campo'
+---------------------------+----------------+
| f_getcomppers(2,5) | otro campo |
+---------------------------+----------------+
| 1 | 10 |
+---------------------------+----------------+
1 row in set (0.00 sec) ( sigue con el 1 donde deberia estar el 10 y el 10 sale en 'otro campo' donde deberia salir esta misma contante.
alguien me puede dar alguna sugerencia.
Gracias de antemano
Me he tropezado con un problema en las funciones de la version 5, tengo esta funcion:
create function f_get(p_u int(10),
p_m tinyint(3))
returns tinyint(3)
begin
declare v_tempdata tinyint(3) default 0;
declare v_percent tinyint(3) default 10;
declare c_m cursor for
select 1 from srchm m
where m.idu =p_u and m.idm =p_m limit 1;
declare continue handler for not found set v_percent =v_percent -1;
open c_m;
fetch c_m into v_tempdata;
close c_m;
return v_percent;
end
y obtengo estos resultados, suponiendo q la tabla "srchm " tiene como valores idu =2, idm =5:
--------------------------------------
mysql> select f_getcomppers(2,5);
+---------------------------+
| f_getcomppers(2,5) |
+---------------------------+
| 1 | (deberia retornar 10, no el uno de la select.
+---------------------------+
1 row in set (0.08 sec)
mysql> select f_getcomppers(2,1212);
+--------------------------------+
| f_getcomppers(2,1212) |
+--------------------------------+
| 9 | (este esta bien, se dispara el handler y decrementa
+--------------------------------+
1 row in set (0.00 sec)
mysql> select f_getcomppers(2,5), 'otro campo'
+---------------------------+----------------+
| f_getcomppers(2,5) | otro campo |
+---------------------------+----------------+
| 1 | 10 |
+---------------------------+----------------+
1 row in set (0.00 sec) ( sigue con el 1 donde deberia estar el 10 y el 10 sale en 'otro campo' donde deberia salir esta misma contante.
alguien me puede dar alguna sugerencia.
Gracias de antemano
Valora esta pregunta


0