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

Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

Estas en el tema de Declarar un CURSOR mediante una Sentencia Preparada en MySQL. en el foro de Mysql en Foros del Web. Buen día, tengo un Procedimiento Almacenado en el cual necesito declarar un CURSOR mediante una Sentencia Preparada, porque antes armo en una variable un filtro ...
  #1 (permalink)  
Antiguo 17/01/2011, 07:41
 
Fecha de Ingreso: enero-2011
Mensajes: 10
Antigüedad: 13 años, 3 meses
Puntos: 0
Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

Buen día,
tengo un Procedimiento Almacenado en el cual necesito declarar un CURSOR mediante una Sentencia Preparada, porque antes armo en una variable un filtro según los parámetros que recibe dicho Procedimiento.

Hago lo siguiente:
1_ Declaro las variables a utilizar.
2_ Asigno con SET dichas variables con los valores de los parámetros recibidos.
3_ Armo la cadena del filtro de la query, asignándola en la variable respectiva.
4_ Armo la Sentencia Preparada donde allí quiero declarar un CURSOR, mediante CONCAT voy armando la cadena de la query con su filtro.
Luego:
PREPARE sentencia_mysql FROM @query_mysql;
5_ Ejecuto la Sentencia Preparada:
EXECUTE sentencia_mysql;
6_ Armo otra Sentencia Preparada para el manejador del Cursor:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET llave = 1;
7_ PREPARE sentencia_del_manejador_mysql FROM @query_mysqlManejador;
8_ Ejecuto la Sentencia Preparada para el HANDLER:
EXECUTE sentencia_del_manejador_mysql;
9_ Sigo con el Procedimiento Almacenado...


Al crear el Procedimiento Almacenado en el Motor MySQL me indica el siguiente error:
#1324 - Undefined CURSOR: CursorExpe

He probado con otros procedimientos almacenados, usando cursores sin utilizar sentencias preparadas y no he tenido inconvenientes. Pero en este caso necesito definir primero el filtro a usar en la query (un SELECT con varias tablas) y luego declarar el cursor.

He leído en muchos foros, en la documentación de MySQL, pero no logro encontrar el error.
Les agradecería que me aclaren si se puede declarar un CURSOR mediante una Sentencia Preparada.

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 17/01/2011, 07:55
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: Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

Los cursores en MySQL sólo se pueden declarar y usar dentro de un SP pero no por fuera. Además los HANDLER sólo se peuden declarar dentro de un SP y sólo luego de toda declaración de variable o estructura a usar en el mismo.
__________________
¿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 17/01/2011, 08:03
 
Fecha de Ingreso: enero-2011
Mensajes: 10
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

No me quedó claro,
dentro del sp intento declarar el cursor y luego el handler mediante sentencias preparadas.
Por lo que veo no se puede de esta manera.

Trabajo con PHP, debería armar la cadena (@query) de la consulta con el filtro deseado y pasársela al sp.
En el sp hacer:
DECLARE elCursor CURSOR FOR @cadena_query;

Es posible esto?

Gracias.
  #4 (permalink)  
Antiguo 17/01/2011, 08:24
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: Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

No. No es posible crear un cursor con una sentencia preparada, y no se puede pasar como parámetro una cadena para ser usada como SELECT de un cursor.

No le sigas dando vueltas:
1) Los cursores en MySQL son objetos que sólo existen en un Stored Procedure y no pueden recibir parametrizaciones externas.
2) Un HANDLER es un objeto de stored procedure cuya declaración debe ser posterior a todo DECLARE que el Sp contenga, y tampoco puede recibir parametrización desde afuera del SP.

Este tipo de cosas es posible en otros DBMS pero NO en MySQL, son límites dados en el motor del MySQL. No los puedes sortear.
__________________
¿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 17/01/2011, 09:37
 
Fecha de Ingreso: enero-2011
Mensajes: 10
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Declarar un CURSOR mediante una Sentencia Preparada en MySQL.

Una lástima.

Muchas gracias por contestar.

Etiquetas: cursor, declarar, sentencia
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 23:26.