Type in the content of your new page here.

Ejemplo de usar funciones almacenadas y cursores.

En este ejemplo se desea correr una vista que actualize un juego de datos.

Creamos la tabla nota que contiene las notas de ciertos estudiantes de una clase de Bases de datos.
CREATE TABLE `nota` (
          `id` int(11) NOT NULL auto_increment,
          `nota1` int(11) default NULL,
          `nota2` int(11) default NULL,
          `nota3` int(11) default NULL,
          `final` int(11) default NULL,
          `definitiva` int(11) default NULL,
        )
Seguidamente creamos la funcion que actualiza para cada registro la nota final como la sumatoria de las notas 1,2,3
DELIMITER $$
 
DROP FUNCTION IF EXISTS F03$$
 
CREATE FUNCTION F03( arg_id INT )
    RETURNS VARCHAR(500)
    BEGIN
 
  DECLARE done BOOL DEFAULT FALSE;
  DECLARE a INT;
  DECLARE b INT;
  DECLARE c INT;
  DECLARE d INT;
  DECLARE rowid INT;
  DECLARE total INT;
  DECLARE cur1 CURSOR FOR SELECT id , nota1 , nota2 , nota3 from nota where id=arg_id;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
 
  set total = 0;
 
   OPEN cur1; myLoop: LOOP
 
   FETCH cur1 INTO rowid , a, b, c;
     set d = a + b + c;
     update nota set final=d where id=rowid;
 
 
     IF done THEN
      CLOSE cur1;
      LEAVE myLoop;
     END IF;
 
    set total = total + 1;
   END LOOP;
 
    IF TOTAL=1 THEN
     RETURN concat(' Se actualizaron ' , total , ' registros, ID= ', arg_id , ' , NotaFinal= ',d);
    ELSE
     RETURN concat(' No Se actualizaron registros');
    END IF;
 
 
    END$$
 
DELIMITER ;

Así mismo ejecutamos

ss