Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/09/2010, 09:39
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 16 años, 1 mes
Puntos: 360
Respuesta: Procedimientos Almacenados

señorita...

No me ha salido.

El error que tienes es que dentro de una sentencia preparada no puedes llamar una variable, por lo que dice que no está declarada. Efectivamente la solución a tu problema es abrir la sentencia concatenada mediante un cursor para posteriormente acceder al valor true o false del count respectivo.

Ahora el problema es para abrir un cursor enviandole una sentencia SQL que es generada en una variable.

Encontré en esta pagina la forma como supuestamente se puede abrir un cursor con SQL dinamico, pero para serte sincero no me ha funcionado.

llegué hasta aca

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE grupo(IN vcodigo VARCHAR(10),IN vtabla VARCHAR(10),IN vnombre VARCHAR(10))
  3. DECLARE existe BOOL;
  4. DECLARE query VARCHAR(500);
  5. SET query = CONCAT("SELECT IF(COUNT(*)>=1,TRUE,FALSE) AS existe1 FROM ",vtabla," WHERE codigo = '",vcodigo,"'");
  6. --PREPARE stmt FROM @query;
  7. EXEC('DECLARE cur CURSOR FOR ' + query);
  8. OPEN cur;
  9. cur_loop: LOOP
  10. IF d=1 THEN
  11.   LEAVE cur_loop;
  12.   FETCH cur INTO existe;
  13. END LOOP cur_loop;
  14. IF existe THEN
  15. UPDATE grupo set nombre = vnombre where codigo= vcodigo;   
  16. INSERT INTO grupo (codigo, nombre) values (vcodigo,vnombre);
  17. --CLOSE cur;
  18. $$
  19. DELIMITER ;

Pero sin resultados satisfactorios.

Esperemos que un mago de mysql te pueda ayudar a solucionar el problema y de paso nos enseñe algo nuevo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming