La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.

Presentaciones similares


Presentación del tema: "Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos."— Transcripción de la presentación:

1 Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos tipos:  Cursores Implícitos: Declarados por todas las instrucciones DML y por la instrucción SELECT y controlados por el Oracle Server  Cursores Explícitos: Declarados y controlados por el programador, usados para manejar consultas que retornan mas de una fila Cursores en PL/SQL

2 Base de Datos I – PL/SQL Cursor Implícito Hay cuatro atributos asociados a los cursores implícitos que permiten controlar y verificar el resultado de su ejecución:

3 Base de Datos I – PL/SQL Cursor Implícito  Atributos de Cursores en PL/SQL:

4 Base de Datos I – PL/SQL Utilice cursores explícitos para procesar individualmente cada fila que se devuelve en una sentencia SELECT de múltiples filas. El conjunto de filas que devuelve una consulta de múltiples filas se denomina conjunto activo. Su tamaño equivale al número de filas que cumplen el criterio de búsqueda. El diagrama de la transparencia muestra cómo un cursor explícito “apunta” a la fila actual del conjunto activo. De esta manera, el programa puede procesar las filas de una en una.

5 Base de Datos I – PL/SQL Crea el área SQL con el nombre del cursor Extrae el conjunto de datos Lee la fila actual en las variables Chequea si hay datos en el cursor Recupera la fila actual Libera el área de datos usada por el cursor SI NO DECLARE VACI O OPEN FETCHCERRAR Control de Cursores Explícitos

6 Base de Datos I – PL/SQL cursor Puntero Apertura del cursor Recuperación de filas Continúa hasta que el cursor esté vacío Cierre del cursor Control de Cursores Explícitos

7 Base de Datos I – PL/SQL

8

9

10

11  El cursor se abre para ejecutar el query e identificar el conjunto de filas que serán recuperadas  Si la consulta no retorna filas, no se levantan excepciones  Se pueden usar los atributos de cursor para chequear el estatus del cursor después de cada FECTH OPEN; OPEN nombre_cursor; Apertura del Cursor

12 Base de Datos I – PL/SQL

13

14  Recupera la fila actual en las variables de salida  El número y tipo de las variables debe coincidir con el de las columnas recuperadas  Cada variable recibirá el valor correspondiente a la columna que le corresponde según la posición  Se debe chequear para verificar si el cursor contiene filas FETCHINTO FETCH nombre_cursor INTO [variable1 ; [,variable2,…] | nombre_registro]; Recuperación de Datos desde el Cursor

15 Base de Datos I – PL/SQL FETCHINTO; FETCH empleados INTO v_empno, v_nombre; … OPEN; OPEN cursor_definido; LOOP FETCHINTO; FETCH cursor_definido INTO variables; EXITWHEN; EXIT WHEN …; … -- Procesamiento de la fila de datos … ENDLOOP; END LOOP; END; Recuperación de Datos desde el Cursor

16 Base de Datos I – PL/SQL

17 Cierre del Cursor  El cursor se debe cerrar al terminar de cerrar el procesamiento de las filas  El cursor puede ser reabierto si es necesario  No intente recuperar una fila de datos una vez que el cursor haya sido cerrado CLOSE; CLOSE nombre_cursor; … FORINLOOP FOR i IN 1..10 LOOP FETCHINTO; FETCH empleados INTO v_empno, v_nombre; … ENDLOOP; END LOOP; CLOSE; CLOSE empleados;

18 Base de Datos I – PL/SQL

19  La recuperación de filas solo es posible cuando el cursor está abierto  El atributo %ISOPEN se usa para evitar tratar de recuperar una fila de datos cuando el cursor está cerrado IFNOT%ISOPENTHEN IF NOT empleados%ISOPEN THEN OPEN; OPEN empleados; ENDIF; END IF; LOOP FETCHINTO...; FETCH empleados INTO...; Atributo %ISOPEN

20 Base de Datos I – PL/SQL  El atributo %ROWCOUNT se usa para obtener el número de filas tratadas  El atributo %NOTFOUND se usa para determinar cuando salir del cursor... OPEN; OPEN empleados; LOOP FETCHINTO; FETCH empleados INTO...; EXITWHEN%ROWCOUNT> EXIT WHEN empleados%ROWCOUNT > 25 OR%NOTFOUND; OR empleados%NOTFOUND;... Los Atributos %NOTFOUND y %ROWCOUNT

21 Base de Datos I – PL/SQL

22  Es la forma mas sencilla de procesar cursores explícitos  Los eventos OPEN, FETCH y CLOSE están implícitos  El registro también está declarado implícitamente FORINLOOP FOR reg_empleado IN nombre_cursor LOOP ; instrucciones; ENDLOOP; END LOOP; Ciclo FOR usado como Cursor

23 Base de Datos I – PL/SQL DECLARE CURSORIS CURSOR empleados IS SELECT SELECT empno, nombre FROM; FROM empleado; BEGIN FORINLOOP FOR reg_empleado IN empleados LOOP ; instrucciones; ENDLOOP; END LOOP; END; Ciclo FOR usado como Cursor

24 Base de Datos I – PL/SQL BEGIN FORINSELECT FOR reg_empleado IN (SELECT empno, nombre FROMLOOP FROM empleado) LOOP ; instrucciones; ENDLOOP; END LOOP; END;  En este caso no es necesario declarar el cursor Cursor FOR usado como Sub-Queries

25 Base de Datos I – PL/SQL  Los parámetros se evalúan cuando el cursor es abierto y el query es ejecutado  Se usan cuando se necesita abrir un cursor varias veces con valores distintos cada vez CURSOR CURSOR nombre_cursor [(nombre_parametro tipo, …)] IS SELECT; SELECT …; OPEN (valor_parametro, …) OPEN nombre_cursor (valor_parametro, …) IN nombre_parametro [IN] :=DEFAULT tipo_dato [{:= | DEFAULT} expresion] Cursores Con Parámetros

26 Base de Datos I – PL/SQL  Ejemplo: DECLARE CURSOR MICURSOR (SUELDO NUMBER) IS SELECT NOMBRE, OFICIO, SALARIO FROM EMPLEADO WHERE SALARIO > SUELDO; BEGIN OPEN MICURSOR (2000);................ (otras sentencias)........ OPEN MICURSOR (3000); END; / Cursores Con Parámetros

27 Base de Datos I – PL/SQL  Los cursores pueden ser utilizados para actualizar o borrar la fila actual  Incluya la cláusula FOR UPDATE en el SELECT del cursor para asegurar primero el bloqueo de las filas de datos  Use la cláusula WHERE CURRENT OF para referenciar la fila actual desde un cursor explícito. Esto sin necesidad de utilizar o referenciarlo por el ROWIND. WHERE CURRENT OF; WHERE CURRENT OF nombre_cursor; Cláusula WHERE CURRENT OF

28 Base de Datos I – PL/SQL  Ejemplo: Cláusula WHERE CURRENT OF DECLARE CURSOR CURSOR_EMP IS CURSOR CURSOR_EMP IS SELECT emp_no, nombre, salario, dnombre FROM empleados e, depart d WHERE e.dept_no = d.dept_no AND d.dept_no = 80 FOR UPDATE OF salario NOWAIT; BEGIN FOR registro_emp IN cursor_emp LOOP IF registro_emp.salario < 5000 THEN UPDATE empleados SET salario = registro_emp.salario*1.10 WHERE CURRENT OF cursor_emp; WHERE CURRENT OF cursor_emp; END IF; END LOOP; END; /

29 Base de Datos I – PL/SQL DECLARE DECLARE CURSOR IS CURSOR mixto IS SELECT SELECT t1.numdept, nombre, staff FROM FROM departamento t1, (SELECT, (SELECT numdept, count(*) staff FROM FROM empleado GROUP BY ) t2 GROUP BY numdept) t2 WHERE WHERE t1.numdept = t2.numdept AND ; AND staff > 1; Cursores con Sub-Queries

30 Base de Datos I – PL/SQL

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68


Descargar ppt "Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos."

Presentaciones similares


Anuncios Google