La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.

Presentaciones similares


Presentación del tema: "3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega."— Transcripción de la presentación:

1 3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega

2 1-2 Definición(1) El servidor Oracle usa área de trabajo llamadas Areas SQL privadas para ejecutar las sentencias SQL y almacenar la información procesada. Es posible usar cursores para nombrar un área privada y consultar su información.El servidor Oracle usa área de trabajo llamadas Areas SQL privadas para ejecutar las sentencias SQL y almacenar la información procesada. Es posible usar cursores para nombrar un área privada y consultar su información.

3 1-3 Definición (2) Todas las sentencias SQL ejecutadas por el servidor de Oracle tienen un cursor individual asociado:Todas las sentencias SQL ejecutadas por el servidor de Oracle tienen un cursor individual asociado: Cursores implícitos: Se declaran y se gestionan por PL/SQL para todas las sentencias SELECT DML y PL/SQL Cursores explícitos: Se declaran y se gestionan por el programador Todas las sentencias SQL ejecutadas por el servidor de Oracle tienen un cursor individual asociado:Todas las sentencias SQL ejecutadas por el servidor de Oracle tienen un cursor individual asociado: Cursores implícitos: Se declaran y se gestionan por PL/SQL para todas las sentencias SELECT DML y PL/SQL Cursores explícitos: Se declaran y se gestionan por el programador

4 1-4 Cursores implícitos - Atributos Retornan información de la ejecución de instrucciones INSERT, UPDATE, DELETE, SELECT INTO, COMMIT, or ROLLBACK %FOUND : La instrucción DML cambió filas?%FOUND : La instrucción DML cambió filas? %NOTFOUND : La instrucción DML falló al cambiar filas?%NOTFOUND : La instrucción DML falló al cambiar filas? %ROWCOUNT: Cúantas filas se cambiaron?%ROWCOUNT: Cúantas filas se cambiaron? Retornan información de la ejecución de instrucciones INSERT, UPDATE, DELETE, SELECT INTO, COMMIT, or ROLLBACK %FOUND : La instrucción DML cambió filas?%FOUND : La instrucción DML cambió filas? %NOTFOUND : La instrucción DML falló al cambiar filas?%NOTFOUND : La instrucción DML falló al cambiar filas? %ROWCOUNT: Cúantas filas se cambiaron?%ROWCOUNT: Cúantas filas se cambiaron? BEGIN UPDATE ESTUDIANTE SET programa_id = 1 where programa_id IS NULL; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' Estudiantes actualizados '); END; BEGIN UPDATE ESTUDIANTE SET programa_id = 1 where programa_id IS NULL; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' Estudiantes actualizados '); END;

5 1-5 Control de cursores explícitos Declarar DECLAREDECLARE Abrir el cursor OPENOPEN Recuperar datos del cursor, fila a fila FETCHFETCH Comprueb a si hay registros EMPTY? Devuelve el control a FECH si encuentra registros No Cierra el cursor CLOSECLOSE Yes

6 1-6 Control de cursores explícitos Abrir cursor Cursor Puntero Cursor Continuar hasta que quede vacío Cursor Puntero Cerrar el cursor

7 1-7 Definición del cursor Se deben definir en la sección de definición de variables y tipos del bloqueSe deben definir en la sección de definición de variables y tipos del bloque Es posible usar variables en el whereEs posible usar variables en el where Se deben definir en la sección de definición de variables y tipos del bloqueSe deben definir en la sección de definición de variables y tipos del bloque Es posible usar variables en el whereEs posible usar variables en el where Ej. CURSOR nombre_cursor IS select …; Ej. CURSOR nombre_cursor IS select …;

8 1-8 Definición del cursor EjemploEjemplo Ej. DECLARE CURSOR cur_estudiantes IS select codigo, nombre from ESTUDIANTE where programa_id = 5 ; CURSOR cur_programas IS select nombre from PROGRAMA order by nombre; BEGIN … Ej. DECLARE CURSOR cur_estudiantes IS select codigo, nombre from ESTUDIANTE where programa_id = 5 ; CURSOR cur_programas IS select nombre from PROGRAMA order by nombre; BEGIN …

9 1-9 Recuperación de datos... OPEN cursor_nombre; LOOP FETCH cursor_nombre INTO variables EXIT WHEN...; -- ej. cursor vacío... -- Procesar los datos … END LOOP; CLOSE cursor_nombre END;... OPEN cursor_nombre; LOOP FETCH cursor_nombre INTO variables EXIT WHEN...; -- ej. cursor vacío... -- Procesar los datos … END LOOP; CLOSE cursor_nombre END; FETCH cursor_nombre INTO v_est_codigo, v_est_nombre; FETCH cursor_nombre INTO v_registro_est;

10 1-10 Usar el LOOP básico EjemploEjemplo DECLARE CURSOR cur_est IS SELECT codigo, promedio FROM ESTUDIANTE; v_reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est; LOOP FETCH cur_est INTO v_reg_est; EXIT WHEN cur_est%NOTFOUND; IF v_reg_est.promedio < 3 THEN dbms_output.put_line(v_reg_est.codigo||‘Reprobado’); END IF; END LOOP; CLOSE cur_est; END; / DECLARE CURSOR cur_est IS SELECT codigo, promedio FROM ESTUDIANTE; v_reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est; LOOP FETCH cur_est INTO v_reg_est; EXIT WHEN cur_est%NOTFOUND; IF v_reg_est.promedio < 3 THEN dbms_output.put_line(v_reg_est.codigo||‘Reprobado’); END IF; END LOOP; CLOSE cur_est; END; /

11 1-11 Usar el FOR cursor Facilita el procesamiento de cursores explícitos Facilita el procesamiento de cursores explícitos Apertura, recuperación y cierre implícitos Apertura, recuperación y cierre implícitos No declarar la variable registro, se declara implícitamente No declarar la variable registro, se declara implícitamente Facilita el procesamiento de cursores explícitos Facilita el procesamiento de cursores explícitos Apertura, recuperación y cierre implícitos Apertura, recuperación y cierre implícitos No declarar la variable registro, se declara implícitamente No declarar la variable registro, se declara implícitamente FOR registro_nombre IN cursor_nombre LOOP sentencia1; sentencia2;... END LOOP; FOR registro_nombre IN cursor_nombre LOOP sentencia1; sentencia2;... END LOOP;

12 1-12 Usar el FOR cursor EjemploEjemplo DECLARE CURSOR cur_est IS SELECT codigo, promedio FROM ESTUDIANTE; BEGIN FOR reg_est IN cur_est LOOP IF reg_est.promedio < 3 THEN dbms_output.put_line(v_reg_est.codigo||‘Reprobado’); END IF; END LOOP; END; / DECLARE CURSOR cur_est IS SELECT codigo, promedio FROM ESTUDIANTE; BEGIN FOR reg_est IN cur_est LOOP IF reg_est.promedio < 3 THEN dbms_output.put_line(v_reg_est.codigo||‘Reprobado’); END IF; END LOOP; END; /

13 1-13 Ejercicio Muestre el código y promedio de todos los estudiantes. Si el promedio es menor a 3 se imprime (‘Reprobado’) si es mayor o igual a 3 se imprime (‘Aprobado’)Muestre el código y promedio de todos los estudiantes. Si el promedio es menor a 3 se imprime (‘Reprobado’) si es mayor o igual a 3 se imprime (‘Aprobado’) Use un LOOP básico Use un FOR Cursor Muestre el código y promedio de todos los estudiantes. Si el promedio es menor a 3 se imprime (‘Reprobado’) si es mayor o igual a 3 se imprime (‘Aprobado’)Muestre el código y promedio de todos los estudiantes. Si el promedio es menor a 3 se imprime (‘Reprobado’) si es mayor o igual a 3 se imprime (‘Aprobado’) Use un LOOP básico Use un FOR Cursor

14 1-14 Atributos de cursores explícitos %FOUND: Se recuperó la siguiente fila?%FOUND: Se recuperó la siguiente fila? %ISOPEN: Está abierto?%ISOPEN: Está abierto? %NOTFOUND : Falló la recuperación de la siguiente fila?%NOTFOUND : Falló la recuperación de la siguiente fila? %ROWCOUNT : Cuantas filas se recuperaron?%ROWCOUNT : Cuantas filas se recuperaron? %FOUND: Se recuperó la siguiente fila?%FOUND: Se recuperó la siguiente fila? %ISOPEN: Está abierto?%ISOPEN: Está abierto? %NOTFOUND : Falló la recuperación de la siguiente fila?%NOTFOUND : Falló la recuperación de la siguiente fila? %ROWCOUNT : Cuantas filas se recuperaron?%ROWCOUNT : Cuantas filas se recuperaron?

15 1-15 Atributos de cursores explícitos EjemploEjemplo SET SERVEROUTPUT ON; DECLARE CURSOR cur_est IS SELECT codigo, nombre FROM ESTUDIANTE; reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est; LOOP FETCH cur_est INTO reg_est; EXIT WHEN cur_est%NOTFOUND OR cur_est%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(cur_est%ROWCOUNT || ' - ' || reg_est.nombre); END LOOP; CLOSE cur_est; END; SET SERVEROUTPUT ON; DECLARE CURSOR cur_est IS SELECT codigo, nombre FROM ESTUDIANTE; reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est; LOOP FETCH cur_est INTO reg_est; EXIT WHEN cur_est%NOTFOUND OR cur_est%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(cur_est%ROWCOUNT || ' - ' || reg_est.nombre); END LOOP; CLOSE cur_est; END; 1 – José 2 – Sara 3 - Pedro 1 – José 2 – Sara 3 - Pedro

16 1-16 Cursores con parámetros SET SERVEROUTPUT ON; DECLARE CURSOR cur_est (p_id_pro PROGRAMA.programa_id%TYPE) IS SELECT codigo, nombre FROM ESTUDIANTE WHERE programa_id = p_id_pro; reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est(2); LOOP FETCH cur_est INTO reg_est; EXIT WHEN cur_est%NOTFOUND OR cur_est%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(cur_est%ROWCOUNT || ' - ' || reg_est.nombre); END LOOP; CLOSE cur_est; END; SET SERVEROUTPUT ON; DECLARE CURSOR cur_est (p_id_pro PROGRAMA.programa_id%TYPE) IS SELECT codigo, nombre FROM ESTUDIANTE WHERE programa_id = p_id_pro; reg_est cur_est%ROWTYPE; BEGIN OPEN cur_est(2); LOOP FETCH cur_est INTO reg_est; EXIT WHEN cur_est%NOTFOUND OR cur_est%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(cur_est%ROWCOUNT || ' - ' || reg_est.nombre); END LOOP; CLOSE cur_est; END;

17 1-17 Bibliografía Oracle® Database PL/SQL Language Reference -11g Release 1 (11.1) - 2009Oracle® Database PL/SQL Language Reference -11g Release 1 (11.1) - 2009


Descargar ppt "3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega."

Presentaciones similares


Anuncios Google