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

ejecutar una sentencia en una variable string en un procedimiento almacenado

Estas en el tema de ejecutar una sentencia en una variable string en un procedimiento almacenado en el foro de Mysql en Foros del Web. hola, estoy intentando hacer un procedimiento almacenado en el que construyo una cadena para ejecutarla... CREATE PROCEDURE StoredProcedure1() begin declare myquery varchar(128) ; set myquery ...
  #1 (permalink)  
Antiguo 04/03/2010, 03:10
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años
Puntos: 1
ejecutar una sentencia en una variable string en un procedimiento almacenado

hola, estoy intentando hacer un procedimiento almacenado en el que construyo una cadena para ejecutarla...

CREATE PROCEDURE StoredProcedure1()
begin
declare myquery varchar(128) ;


set myquery = 'update pruebas set prop=1000' ;
PREPARE stmt2 FROM @myquery;
execute stmt2;




end

pero me da el error:
Error 1312...procedure cant return a result set in the given context...

lei que estas sentencias estan obsoletas, ¿hay alguna manera de ejecutar una sentencia que vayas construyendo sobre la marcha?'

gracias
  #2 (permalink)  
Antiguo 04/03/2010, 05:16
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, 5 meses
Puntos: 2658
Respuesta: ejecutar una sentencia en una variable string en un procedimiento almacena

En tu SP, myquery y @myquery no son la misma variable.
la primera es una variable local del SP, la otra es una variable de usuario, y pertenece a la conexión, no al SP.
Toda variable que comienza con "@" es una variable de usuario, y es persistente en al conexión donde se inicializó. Además no se declaran (no tienen tipo), sino que adquieren su tipo al inicializarlas.

Prueba:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE StoredProcedure1()
  3.     SET @myquery = 'UPDATE pruebas SET prop=1000;' ;
  4.     PREPARE stmt2 FROM @myquery;
  5.     EXECUTEstmt2;
  6. END$$
  7. 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 04/03/2010, 06:07
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años
Puntos: 1
Respuesta: ejecutar una sentencia en una variable string en un procedimiento almacena

gracias por las molestias, lo de las dos variables fue un error de copy pega...lo siento..

de todos modos, aunque el procedure se crea bien con lo que me pasaste, luego me da el error de siempre ..procedure cant return a result set in the given context...
¿ tienes alguna idea más? dependerá de la versión de mysql, o de alguna extension que me falte?
Gracias!
  #4 (permalink)  
Antiguo 04/03/2010, 07:14
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, 5 meses
Puntos: 2658
Respuesta: ejecutar una sentencia en una variable string en un procedimiento almacena

Si. Es un bug de PHP, que se produce con algunas versiones de phpMyadmin posteriores a la 5.2.3.
Eso lo puedes ver en estos reportes:
Supuestamente si haces un downgrade al 5.2.3 se resolvería el problema, o bien cambiar el estado de la variable CLIENT_MULTI_STATEMENTS a 0.
En cualquier caso el problema no está en MySQL mismo sino en phpMyAdmin, por lo que tal vez en el Foro de PHP sepan algo más.

Si usas la consola de MySQL para probar el funcionamiento, muy probablemente el Sp funcione bien...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/03/2010, 10:05
 
Fecha de Ingreso: abril-2006
Mensajes: 54
Antigüedad: 18 años
Puntos: 1
Respuesta: ejecutar una sentencia en una variable string en un procedimiento almacena

muchas gracias, al final lo apañé... usando el procedimiento almacenado me daba error de sintaxis con la sentencia prepare,

total: que use una tabla temporal....inserto en una tabla temporal las querys que debía ejecutar, y luego desde el php recorro la tabla temporal y lo meto en una cadena, y llamo al mysql para ejecutarla....mas ineficiente pero no puedo perder mas tiempo en esto...
gracias a todos!

Etiquetas: ejecutar, procedimiento, sentencia, string, almacenar, variables
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 11:51.