Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPARTAMENTO DE INFORMÁTICA
Administración de Base
de Datos
Tercer Semestre
Ing. Lorena Bowen Mendoza
ADMINISTRACIÓN DE BASES DE DATOS
PROCESAMIENTO DE
TRANSACCIONES
UNIDAD II
ADMINISTRACIÓN DE BASES DE DATOS
Objetivo de la Clase:
Escribir procedimientos PL/SQL utilizando Cursores.
• No significa que el objeto cursor_edad vaya a guardar los datos de la consulta a la cual
esta referenciando. Lo que hace es apuntar a la dirección de memoria del primer
resultado de dicha consulta.
6/27/2020 Cognitive Cities Management Research Group (CMMA) 7
CURSORES
2. APERTURA
OPEN nombre_cursor;
SELECT counter;
END LOOP MY_LOOP;
END //
DELIMITER ;
• CALL simple_loop();
DELIMITER //
C1_LOOP: LOOP
CREATE PROCEDURE PruebaCursor()
Se crea la variable #Leyendo la fila del cursos y asignando a las variables
BEGIN Limite con valor FALSE
FETCH Lista INTO v_IdPersona, v_Apellido, v_Nombres;
DECLARE Limite BOOLEAN DEFAULT FALSE;
Cada vez que se ejecuta el FETCH
DECLARE v_IdPersona INTEGER; se lee un registro del cursor
IF Limite THEN
DECLARE v_Apellido VARCHAR(50);
Llenado del cursor LEAVE C1_LOOP; Cuando se terminan los registros
DECLARE v_Nombres VARCHAR(50); mediante la consulta del cursor Limite = TRUE y sale
END IF; del LOOP
DECLARE Lista cursor for
SELECT v_IdPersona, v_Apellido, v_Nombres;
SELECT IdPersona, ApellidoPaterno, Nombres
END LOOP C1_LOOP; Muestra los datos leídos en
FROM personas ; FETCH.
#Definición del Handler con la variable Limite
CLOSE Lista;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET
Limite cambia a valor TRUE
END // Cerrando el cursor
Limite = TRUE; cuando ya no hay mas datos DELIMITER ;
CALL PruebaCursor();
CURSORES
MODELO E/R DE LA UNIDAD EDUCATIVA
DELIMITER //
OPEN Lista;
CREATE PROCEDURE PruebaCursor1()
C1_LOOP: LOOP
BEGIN
FETCH Lista INTO v_IdProfesor, v_IdEspecialidad, v_IdCurso,
DECLARE Limite BOOLEAN DEFAULT FALSE;
v_IdParalelo;
DECLARE v_IdProfesor INTEGER;
IF Limite THEN
DECLARE v_IdEspecialidad INTEGER;
LEAVE C1_LOOP;
DECLARE v_IdCurso INTEGER;
END IF;
DECLARE v_IdParalelo INTEGER;
IF v_IdProfesor > 4 THEN
#Llenado del cursor mediante la consulta
INSERT INTO tiposasignaturas VALUES(v_IdProfesor+10,
DECLARE Lista cursor for
“Mayor que cuatro”);
SELECT IdPersonaProfesor, IdEspecialidad, IdCurso,
ELSE
IdParalelo
INSERT INTO tiposasignaturas VALUES(v_IdProfesor+10,
FROM materias AS M1, Materiasprofesores AS M2
“Menor que cinco”);
WHERE M1.IdMateria = M2.IdMateria
END IF;
AND M1.NombreMateria IN ('DIBUJO','CULTURA FISICA',
END LOOP C1_LOOP;
'INGLES')
CLOSE Lista;
GROUP BY idpersonaprofesor, IdEspecialidad, IdCurso,
END //
IdParalelo ;
DELIMITER ;