Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/10/2011, 15:24
solarconfinement
 
Fecha de Ingreso: octubre-2010
Mensajes: 18
Antigüedad: 13 años, 7 meses
Puntos: 0
Orientacion con Stored Procedure

Saludos, tengo un pequeño problema con un stored procedure, vale la pena destacar que este es mi primer SP en mySql...

Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `registrarOperacion` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `registrarOperacion`(tabla varchar(255), atributo varchar(255), identificador int, valor double)
BEGIN

  declare padre int;
  declare valor2 double;
  declare suma double;


SET @PADRE = NULL;
SET @IDENTIFICADOR = NULL;
SET @VALORTOTAL = NULL;
SET @SUMA = NULL;
SET @VALOR2 = NULL;
set @sumatotal = NULL;


SET @qry1 = CONCAT('SELECT parent_id from ', tabla, ' WHERE id =', identificador,' into @padre;');
SET @qry2 = CONCAT('SELECT ', atributo, ' from ', tabla, ' where id=@padre into @VALOR2;');
SET @qry3 = CONCAT('UPDATE ', tabla, ' set ', atributo, ' = ',valor,' where id = ', identificador, ';');

PREPARE stmt1 FROM @qry1;
PREPARE stmt2 FROM @qry2;
PREPARE stmt3 FROM @qry3;

EXECUTE stmt1;
EXECUTE stmt2;
EXECUTE stmt3;

    if @padre <> 0 then

        SET @qry4 = CONCAT('SELECT sum(', atributo, ') from ', tabla, ' where parent_id=@padre into @SUMA;');       
        SET @qry5 = CONCAT('UPDATE (', tabla, ') set ', atributo, '=@SUMA WHERE ID=@padre');
        PREPARE stmt4 FROM @qry4;
        PREPARE stmt5 FROM @qry5;
        EXECUTE stmt4;
        EXECUTE stmt5;
        SET @@GLOBAL.max_sp_recursion_depth = 255;
           SET @@session.max_sp_recursion_depth = 255;
        call registrarOperacion(tabla,atributo,@PADRE,@SUMA);


    end if;

END $$

DELIMITER ;
Necesito que en lugar de 'valor' (uno de los parametros que inserto) pueda sumar el valor del parametro insertado con el valor de @VALOR2 y a su vez
poder colocar el resultado en lugar de 'valor' en esta sentencia
Código:
SET @qry3 = CONCAT('UPDATE ', tabla, ' set ', atributo, ' = ',valor,' where id = ', identificador, ';');
Alguna idea? alguien me puede dar una mano?

gracias de antemano...