SlideShare una empresa de Scribd logo
/*
Sesión10 – Cursores
Estudiante: José Luis Toro Alcarraz
Curso: Base de Datos Avanzado II
Correo:i201010865@cibertec.edu.pe
*/
Objetivos de la sesión.




Definir qué es un cursor en PL/SQL.
Entender los diferentes tipos de cursores.
Conocer las estrategias para controlar adecuadamente los cursores.

1) Definición y declaración de cursores
2) Control de cursores
3) Atributos de cursores
4) Bucle FOR de Cursor
5) Cursores con Parámetros
6) Cláusula FOR UPDATE
7) Cláusula WHERE CURRENT OF
1) Definición y declaración de cursores.

Útiles para las consultas que devuelven más de una fila.
Son declarados y nombrados por el programador, y manipulados por medio de
sentencias específicas en las acciones ejecutables del bloque.
Sintaxis:
a) Sintaxis de declaración del Cursor
CURSOR nom_cursor IS
Sentencia select
No incluya la cláusula INTO en la declaración del cursor.
Si es necesario procesar filas en algún orden, incluya la cláusula ORDER BY.
Ejemplo de Declaración
DECLARE
CURSOR c1 IS
SELECT empno, ename, job, sal
FROM emp
WHERE sal>200;
BEGIN
…
END;
/
b) Sintaxis de apertura del Cursor
OPEN nombre_cursor;
Si la consulta no devuelve ninguna fila, no se producirá ninguna excepción al abrir el cursor.
Para los cursores declarados con la cláusula FOR UPDATE, la sentencia OPEN bloquea estas
filas.
c) Sintaxis de recuperación de datos
FETCH nombre_cursor
INTO [variable1, …] [nombre_registro];
Incluya, en el FETCH, el mismo número de variables que las definidas en el cursor, y en el
mismo orden.
Compruebe si el cursor tiene filas.
c) Sintaxis de cierre del Cursor
CLOSE nombre_cursor;
Cierre el cursor una vez completado el procesamiento de las filas.
Si es necesario, vuelva a abrir el cursor.
No intente recuperar los datos de un cursor una vez que ha sido cerrado (INVALID_CURSOR).
2) Control de cursores.
1º. Crear un área SQL específica  DECLARE
2º. Identificar el juego activo OPEN
3º. Cargar la fila actual en variables  FETCH
4º. Si todavía existen filas sin leer, volver a 3º.
5º. Si no existen más filas a leer  CLOSE

3) Atributos de Cursores
Proporcionan información de estado del cursor:
Atributos de Cursores
a) El Atributo %ISOPEN
Utilice el atributo de cursor %ISOPEN antes de ejecutar una recuperación para comprobar si el
cursor está abierto.
Ejemplo:
IF NOT cursor_nombre%ISOPEN THEN
OPEN cursor_nombre;
END IF;
LOOP
FETCH cursor_nombre INTO [variable1, variable2, …] [variable_de_registro]
END LOOP;
b) Atributos %NOTFOUND, %ROWCOUNT
Utilice %ROWCOUNT para recuperar un número exacto de filas.
Utilice %NOTFOUND para determinar cuándo salir del bucle de lectura del cursor.
Antes de la primera recuperación, %NOTFOUND es NULL, así que si FETCH no se
ejecuta nunca satisfactoriamente, no se saldría nunca del bucle de lectura.
Ejemplo %NOTFOUND, %ROWCOUNT
LOOP
FETCH cursor_nombre INTO vename, vdeptno;
IF cursor_nombre%ROWCOUNT > 20 THEN
…
END IF
EXIT WHEN cursor_nombre%NOTFOUND
OR cursor_nombre%NOTFOUND IS NULL
END LOOP;
4) Bucles FOR de Cursor
Sintaxis
FOR nombre_registro IN nombre_cursor LOOP
Sentencia1;
…

END LOOP;
Apertura, recuperación y cierre implícitos.
No declare el registro, está declarado implícitamente.
5) Cursores con Parámetros
Sintaxis 1
CURSOR nombre_cursor
[(nombre_parámetro tipo_de_dato, …)]
IS sentencia_select;
Permite abrir un cursor varias veces con un juego activo distinto cada vez.
Sintaxis 2
CURSOR nombre_cursor
nombre_parámetro [IN] tipo_de_dato
[{:= | DEFAULT}] expresión]
IS sentencia_select;
Cada parámetro formal de la declaración del cursor debe tener un parámetro real
correspondiente en la sentencia OPEN.
Ejemplo
DECLARE
CURSOR cursor_empleados (v_deptno NUBER, v_job VARCHAR2) IS
SELECT ename, sal, hiredate
FROM emp
WHERE deptno = v_deptno
AND title = v_job;
BEGIN;
Transfiera el número de departamento y el cargo a la cláusula WHERE:

6) Cláusula FOR UPDATE
Sintaxis
SELECT … FROM …
FOR UPDATE [OF nombre_columna] [NOWAIT]
El bloqueo explícito le permite denegar el acceso mientras dura una transacción.
Bloquee las filas antes de la actualización o supresión.
La cláusula FOR UPDATE es la última cláusula de una sentencia SELECT, incluso después
del ORDER BY.
NOWAIT devuelve un error de Oracle si las filas han sido bloqueadas por otra sesión, de lo
contrario se espera.
7) Cláusula WHERE CURRENT OF
{UPDATE | DELETE} ….
WHERE CURRENT OF nombre_cursor;
Incluya la cláusula FOR UPDATE en la definición del cursor para bloquear las filas.
Especifique WHERE CURRENT OF en la sentencia UPDATE o DELETE para referirse a la fila
actual del cursor.
Ejercicio1:
Programa que imprima el ranquin de ventas por empleados (titulo,puesto,nomemp,codigo,monto.).
DECLARE
CURSOR CUR_RANKING IS
SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL
FROM EMP E LEFT JOIN ORD O
ON E.EMPNO = O.EMPNO
GROUP BY E.EMPNO,E.ENAME
ORDER BY 3 DESC;
REG_RANKING CUR_RANKING%ROWTYPE;
V_POSICION NUMBER(4,2):=1;
BEGIN
DBMS_OUTPUT.PUT_LINE('RANKING DE EMPLEADOS POR VENTA');
DBMS_OUTPUT.PUT_LINE(RPAD('*',100,'*'));
OPEN CUR_RANKING;
LOOP
FETCH CUR_RANKING INTO REG_RANKING;
EXIT WHEN CUR_RANKING%NOTFOUND;
/* PROCESAMIENTO DE LOSREGISTROS RECUPERADOS */
DBMS_OUTPUT.PUT_LINE(RPAD(V_POSICION,10) ||
RPAD(REG_RANKING.EMPNO,10) || RPAD(REG_RANKING.ENAME,20) ||
RPAD(REG_RANKING.TOTAL,10));
END LOOP;
CLOSE CUR_RANKING;
END;
/
Ejercicio2:
PROGRAMA QUE ACTUALIZE LAS COMISIONES A TODOS LOS EMPLEADOS
MENOS DE 5000 3% DE LAS VENTAS
MAS DE 5000 5% DE LAS VENTAS
DECLARE
CURSOR CUR_RANKING IS
SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL
FROM EMP E LEFT JOIN ORD O
ON E.EMPNO = O.EMPNO
GROUP BY E.EMPNO,E.ENAME
ORDER BY 3 DESC;
REG_RANKING CUR_RANKING%ROWTYPE;
V_COMISION NUMBER(8,2);
BEGIN
OPEN CUR_RANKING;
LOOP
FETCH CUR_RANKING INTO REG_RANKING;
EXIT WHEN CUR_RANKING%NOTFOUND;
if REG_RANKING.TOTAL < 5000 then
V_COMISION :=0.03 * REG_RANKING.TOTAL;
else
V_COMISION :=0.05 * REG_RANKING.TOTAL;
end if;
update emp
set comm =V_COMISION
where empno = REG_RANKING.EMPNO;
COMMIT;
END LOOP;
CLOSE CUR_RANKING;
END;
/
Ejercicio3:
Programa que imprima el ranquin de ventas por empleados (titulo,puesto,nomemp,codigo,monto.).
declare
CURSOR CUR_RANKING IS
SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL
FROM EMP E LEFT JOIN ORD O
ON E.EMPNO = O.EMPNO
GROUP BY E.EMPNO,E.ENAME
ORDER BY 3 DESC;
REG_RANKING CUR_RANKING%ROWTYPE;
V_COMISION NUMBER(8,2);
begin
OPEN CUR_RANKING;
FETCH CUR_RANKING INTO REG_RANKING;
FOR REG_RANKING IN CUR_RANKING LOOP
if REG_RANKING.TOTAL < 5000 then
V_COMISION :=0.03 * REG_RANKING.TOTAL;
else
V_COMISION :=0.05 * REG_RANKING.TOTAL;
end if;
update emp
set comm =V_COMISION
where empno = REG_RANKING.EMPNO;
COMMIT;
END LOOP;
CLOSE CUR_RANKING;
end;
/
Propuesto
Incrementar la comisión, en función del salario, de los empleados de Bostón y Nueva York según
su antigüedad y cargo¸según la siguiente tabla:

Fuente de apoyo: http://www.mundoracle.com/cursores.html

Más contenido relacionado

La actualidad más candente

Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)
José Toro
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
Edwin Romero
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
José Toro
 
Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)
José Toro
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)
José Toro
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
luisguil
 
Oracle pl sql
Oracle pl sqlOracle pl sql
Oracle pl sql
claudia_m
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
Luciano Gutierrez
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
Fabián Alexander Moya
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
DeisyVilchez
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
Kamisutra
 
Pl Sql
Pl SqlPl Sql
7.1. procedimientos almacenados
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
Rigoberto Gonzalez Fuentes
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Sql
SqlSql
Disparadores
DisparadoresDisparadores
Disparadores
Adriana Becerra
 
HTML5 API WebSQL Database: DML: Data Manipulation Language
HTML5 API WebSQL Database: DML: Data Manipulation LanguageHTML5 API WebSQL Database: DML: Data Manipulation Language
HTML5 API WebSQL Database: DML: Data Manipulation Language
Francisco Javier Arce Anguiano
 
Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12
Alexander Calderón
 
Pl
PlPl
HTML5 API WebSQL Database: Funciones de agregado
HTML5 API WebSQL Database: Funciones de agregadoHTML5 API WebSQL Database: Funciones de agregado
HTML5 API WebSQL Database: Funciones de agregado
Francisco Javier Arce Anguiano
 

La actualidad más candente (20)

Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)Sesion06a - Manipulacion de datos (Oracle)
Sesion06a - Manipulacion de datos (Oracle)
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
 
Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)Sesión04 - Diccionario de datos (Oracle)
Sesión04 - Diccionario de datos (Oracle)
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
 
Oracle pl sql
Oracle pl sqlOracle pl sql
Oracle pl sql
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
7.1. procedimientos almacenados
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Sql
SqlSql
Sql
 
Disparadores
DisparadoresDisparadores
Disparadores
 
HTML5 API WebSQL Database: DML: Data Manipulation Language
HTML5 API WebSQL Database: DML: Data Manipulation LanguageHTML5 API WebSQL Database: DML: Data Manipulation Language
HTML5 API WebSQL Database: DML: Data Manipulation Language
 
Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12Otros Objetos de Esquemas Z051 Cap 12
Otros Objetos de Esquemas Z051 Cap 12
 
Pl
PlPl
Pl
 
HTML5 API WebSQL Database: Funciones de agregado
HTML5 API WebSQL Database: Funciones de agregadoHTML5 API WebSQL Database: Funciones de agregado
HTML5 API WebSQL Database: Funciones de agregado
 

Destacado

Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)
José Toro
 
Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)
José Toro
 
Sesión01 - Gestión de instancia (Oracle)
Sesión01 - Gestión de instancia (Oracle)Sesión01 - Gestión de instancia (Oracle)
Sesión01 - Gestión de instancia (Oracle)
José Toro
 
Cursores
CursoresCursores
Cursores
Richard Castro
 
Conexion a la base de datos
Conexion a la base de datosConexion a la base de datos
Conexion a la base de datos
OscSoft
 
CapÍtulo 23 (Seguridad de base de datos)
CapÍtulo 23 (Seguridad de base de datos)CapÍtulo 23 (Seguridad de base de datos)
CapÍtulo 23 (Seguridad de base de datos)
Liz Ocampo
 
Semana 1 t sistema de base de datos
Semana 1 t sistema de base de datosSemana 1 t sistema de base de datos
Semana 1 t sistema de base de datos
erickrwk
 
Tema 02 - Filtros - 2012 01
Tema 02 - Filtros - 2012 01Tema 02 - Filtros - 2012 01
Tema 02 - Filtros - 2012 01
ciberayudavirtualplus2
 
Tema 03 filtros 2011 02
Tema 03   filtros 2011 02Tema 03   filtros 2011 02
Tema 03 filtros 2011 02
ciberayudavirtualplus2
 
Tema 05 tablas dinamicas 2011 02
Tema 05   tablas dinamicas 2011 02Tema 05   tablas dinamicas 2011 02
Tema 05 tablas dinamicas 2011 02
ciberayudavirtualplus2
 
Tema 06 fun matemáticas, texto, y fecha y hora 2011 02
Tema 06   fun matemáticas, texto, y fecha y hora 2011 02Tema 06   fun matemáticas, texto, y fecha y hora 2011 02
Tema 06 fun matemáticas, texto, y fecha y hora 2011 02
ciberayudavirtualplus2
 
Tema 01 Base de Datos - 2012 01
Tema 01   Base de Datos  - 2012 01Tema 01   Base de Datos  - 2012 01
Tema 01 Base de Datos - 2012 01
ciberayudavirtualplus2
 
Tema 00 - Introducción - 2012 00
Tema 00 - Introducción - 2012 00Tema 00 - Introducción - 2012 00
Tema 00 - Introducción - 2012 00
ciberayudavirtualplus2
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
ArchCHUZ
 
Tema 03 Consolidación y Tablas Dinamicas
Tema 03 Consolidación y Tablas DinamicasTema 03 Consolidación y Tablas Dinamicas
Tema 03 Consolidación y Tablas Dinamicas
ciberayudavirtualplus2
 
Tema 08 funciones de busqueda y anidamientos 2011 02
Tema 08   funciones de busqueda y anidamientos 2011 02Tema 08   funciones de busqueda y anidamientos 2011 02
Tema 08 funciones de busqueda y anidamientos 2011 02
ciberayudavirtualplus2
 
Tema 04 esquemas y datos externos 2011 02
Tema 04   esquemas y datos externos 2011 02Tema 04   esquemas y datos externos 2011 02
Tema 04 esquemas y datos externos 2011 02
ciberayudavirtualplus2
 
Tema 07 funciones estadisticas, bases de datos y logicas 2011 02
Tema 07   funciones estadisticas, bases de datos y logicas 2011 02Tema 07   funciones estadisticas, bases de datos y logicas 2011 02
Tema 07 funciones estadisticas, bases de datos y logicas 2011 02
ciberayudavirtualplus2
 

Destacado (18)

Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)Sesión14 – Archivos redologs (Oracle)
Sesión14 – Archivos redologs (Oracle)
 
Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)Sesión13 - Archivos de Control (Oracle)
Sesión13 - Archivos de Control (Oracle)
 
Sesión01 - Gestión de instancia (Oracle)
Sesión01 - Gestión de instancia (Oracle)Sesión01 - Gestión de instancia (Oracle)
Sesión01 - Gestión de instancia (Oracle)
 
Cursores
CursoresCursores
Cursores
 
Conexion a la base de datos
Conexion a la base de datosConexion a la base de datos
Conexion a la base de datos
 
CapÍtulo 23 (Seguridad de base de datos)
CapÍtulo 23 (Seguridad de base de datos)CapÍtulo 23 (Seguridad de base de datos)
CapÍtulo 23 (Seguridad de base de datos)
 
Semana 1 t sistema de base de datos
Semana 1 t sistema de base de datosSemana 1 t sistema de base de datos
Semana 1 t sistema de base de datos
 
Tema 02 - Filtros - 2012 01
Tema 02 - Filtros - 2012 01Tema 02 - Filtros - 2012 01
Tema 02 - Filtros - 2012 01
 
Tema 03 filtros 2011 02
Tema 03   filtros 2011 02Tema 03   filtros 2011 02
Tema 03 filtros 2011 02
 
Tema 05 tablas dinamicas 2011 02
Tema 05   tablas dinamicas 2011 02Tema 05   tablas dinamicas 2011 02
Tema 05 tablas dinamicas 2011 02
 
Tema 06 fun matemáticas, texto, y fecha y hora 2011 02
Tema 06   fun matemáticas, texto, y fecha y hora 2011 02Tema 06   fun matemáticas, texto, y fecha y hora 2011 02
Tema 06 fun matemáticas, texto, y fecha y hora 2011 02
 
Tema 01 Base de Datos - 2012 01
Tema 01   Base de Datos  - 2012 01Tema 01   Base de Datos  - 2012 01
Tema 01 Base de Datos - 2012 01
 
Tema 00 - Introducción - 2012 00
Tema 00 - Introducción - 2012 00Tema 00 - Introducción - 2012 00
Tema 00 - Introducción - 2012 00
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
Tema 03 Consolidación y Tablas Dinamicas
Tema 03 Consolidación y Tablas DinamicasTema 03 Consolidación y Tablas Dinamicas
Tema 03 Consolidación y Tablas Dinamicas
 
Tema 08 funciones de busqueda y anidamientos 2011 02
Tema 08   funciones de busqueda y anidamientos 2011 02Tema 08   funciones de busqueda y anidamientos 2011 02
Tema 08 funciones de busqueda y anidamientos 2011 02
 
Tema 04 esquemas y datos externos 2011 02
Tema 04   esquemas y datos externos 2011 02Tema 04   esquemas y datos externos 2011 02
Tema 04 esquemas y datos externos 2011 02
 
Tema 07 funciones estadisticas, bases de datos y logicas 2011 02
Tema 07   funciones estadisticas, bases de datos y logicas 2011 02Tema 07   funciones estadisticas, bases de datos y logicas 2011 02
Tema 07 funciones estadisticas, bases de datos y logicas 2011 02
 

Similar a Sesion08 - Cursores (Oracle)

13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx
LeydyVeronicaDelgado
 
13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx
LeydyVeronicaDelgado
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
Karina Arguedas Ruelas
 
Js control de flujo
Js control de flujoJs control de flujo
Js control de flujo
FERNANDOZ9
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
Fernando Solis
 
PL SQL Diplomado Oracle
PL SQL Diplomado OraclePL SQL Diplomado Oracle
PL SQL Diplomado Oracle
Uzziel Chaidez
 
SESION-07.pptx
SESION-07.pptxSESION-07.pptx
SESION-07.pptx
GIANANTONYGONZAVASQU
 
Semana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitosSemana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitos
victdiazm
 
Turbo c++ 3.0
Turbo c++ 3.0Turbo c++ 3.0
Turbo c++ 3.0
Jorge Ñauñay
 
Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScript
tovi27
 
Cursores
CursoresCursores
Cursores
Vicente Alberca
 
Tutorial lenguaje c
Tutorial lenguaje cTutorial lenguaje c
Tutorial lenguaje c
tbjs
 
Tutorial lenguaje c
Tutorial lenguaje cTutorial lenguaje c
Tutorial lenguaje c
tbjs
 
2ª unidad de algoritmo
2ª unidad de algoritmo2ª unidad de algoritmo
2ª unidad de algoritmo
especialidaddesistemas
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
Andrei Hortúa
 
Pl
PlPl
44777047 oracle
44777047 oracle44777047 oracle
44777047 oracle
Leonardo Guerrero
 
Robotica y automatizacion
Robotica y automatizacionRobotica y automatizacion
Robotica y automatizacion
Andres Zamudio
 
Programacion C#
Programacion C#Programacion C#
Programacion C#
Andrew King
 
Programación básica
Programación básicaProgramación básica
Programación básica
Carlos Van de Velde
 

Similar a Sesion08 - Cursores (Oracle) (20)

13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx
 
13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
 
Js control de flujo
Js control de flujoJs control de flujo
Js control de flujo
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
PL SQL Diplomado Oracle
PL SQL Diplomado OraclePL SQL Diplomado Oracle
PL SQL Diplomado Oracle
 
SESION-07.pptx
SESION-07.pptxSESION-07.pptx
SESION-07.pptx
 
Semana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitosSemana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitos
 
Turbo c++ 3.0
Turbo c++ 3.0Turbo c++ 3.0
Turbo c++ 3.0
 
Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScript
 
Cursores
CursoresCursores
Cursores
 
Tutorial lenguaje c
Tutorial lenguaje cTutorial lenguaje c
Tutorial lenguaje c
 
Tutorial lenguaje c
Tutorial lenguaje cTutorial lenguaje c
Tutorial lenguaje c
 
2ª unidad de algoritmo
2ª unidad de algoritmo2ª unidad de algoritmo
2ª unidad de algoritmo
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
 
Pl
PlPl
Pl
 
44777047 oracle
44777047 oracle44777047 oracle
44777047 oracle
 
Robotica y automatizacion
Robotica y automatizacionRobotica y automatizacion
Robotica y automatizacion
 
Programacion C#
Programacion C#Programacion C#
Programacion C#
 
Programación básica
Programación básicaProgramación básica
Programación básica
 

Último

Power Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascaradoPower Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascarado
https://gramadal.wordpress.com/
 
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdfCUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
Inslvarez5
 
Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.
amayaltc18
 
2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado
GiselaBerrios3
 
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Inteligencia Artificial para Docentes  HIA  Ccesa007.pdfInteligencia Artificial para Docentes  HIA  Ccesa007.pdf
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Demetrio Ccesa Rayme
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Demetrio Ccesa Rayme
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
Mónica Sánchez
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Demetrio Ccesa Rayme
 
Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024
israelsouza67
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
YeniferGarcia36
 
Respuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadasRespuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadas
KarenCaicedo28
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
JonathanCovena1
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Demetrio Ccesa Rayme
 
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJAPANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
estroba5
 
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptxNuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
lautyzaracho4
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
RAMIREZNICOLE
 
efemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptxefemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptx
acgtz913
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
100078171
 
Manual de procedimiento para gráficos HC
Manual de procedimiento para gráficos HCManual de procedimiento para gráficos HC
Manual de procedimiento para gráficos HC
josseanlo1581
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Unidad de Espiritualidad Eudista
 

Último (20)

Power Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascaradoPower Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascarado
 
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdfCUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
CUENTOS EN MAYÚSCULAS PARA APRENDER A LEER.pdf
 
Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.
 
2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado
 
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Inteligencia Artificial para Docentes  HIA  Ccesa007.pdfInteligencia Artificial para Docentes  HIA  Ccesa007.pdf
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
 
Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
 
Respuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadasRespuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadas
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
 
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJAPANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
PANDERETAS DECORADAS CON MOTIVOS DE LA RIOJA
 
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptxNuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
 
efemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptxefemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptx
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
 
Manual de procedimiento para gráficos HC
Manual de procedimiento para gráficos HCManual de procedimiento para gráficos HC
Manual de procedimiento para gráficos HC
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
 

Sesion08 - Cursores (Oracle)

  • 1. /* Sesión10 – Cursores Estudiante: José Luis Toro Alcarraz Curso: Base de Datos Avanzado II Correo:i201010865@cibertec.edu.pe */ Objetivos de la sesión.    Definir qué es un cursor en PL/SQL. Entender los diferentes tipos de cursores. Conocer las estrategias para controlar adecuadamente los cursores. 1) Definición y declaración de cursores 2) Control de cursores 3) Atributos de cursores 4) Bucle FOR de Cursor 5) Cursores con Parámetros 6) Cláusula FOR UPDATE 7) Cláusula WHERE CURRENT OF 1) Definición y declaración de cursores. Útiles para las consultas que devuelven más de una fila. Son declarados y nombrados por el programador, y manipulados por medio de sentencias específicas en las acciones ejecutables del bloque. Sintaxis: a) Sintaxis de declaración del Cursor CURSOR nom_cursor IS Sentencia select No incluya la cláusula INTO en la declaración del cursor. Si es necesario procesar filas en algún orden, incluya la cláusula ORDER BY. Ejemplo de Declaración DECLARE CURSOR c1 IS SELECT empno, ename, job, sal FROM emp WHERE sal>200; BEGIN … END; /
  • 2. b) Sintaxis de apertura del Cursor OPEN nombre_cursor; Si la consulta no devuelve ninguna fila, no se producirá ninguna excepción al abrir el cursor. Para los cursores declarados con la cláusula FOR UPDATE, la sentencia OPEN bloquea estas filas. c) Sintaxis de recuperación de datos FETCH nombre_cursor INTO [variable1, …] [nombre_registro]; Incluya, en el FETCH, el mismo número de variables que las definidas en el cursor, y en el mismo orden. Compruebe si el cursor tiene filas. c) Sintaxis de cierre del Cursor CLOSE nombre_cursor; Cierre el cursor una vez completado el procesamiento de las filas. Si es necesario, vuelva a abrir el cursor. No intente recuperar los datos de un cursor una vez que ha sido cerrado (INVALID_CURSOR). 2) Control de cursores. 1º. Crear un área SQL específica  DECLARE 2º. Identificar el juego activo OPEN 3º. Cargar la fila actual en variables  FETCH 4º. Si todavía existen filas sin leer, volver a 3º. 5º. Si no existen más filas a leer  CLOSE 3) Atributos de Cursores Proporcionan información de estado del cursor: Atributos de Cursores
  • 3. a) El Atributo %ISOPEN Utilice el atributo de cursor %ISOPEN antes de ejecutar una recuperación para comprobar si el cursor está abierto. Ejemplo: IF NOT cursor_nombre%ISOPEN THEN OPEN cursor_nombre; END IF; LOOP FETCH cursor_nombre INTO [variable1, variable2, …] [variable_de_registro] END LOOP; b) Atributos %NOTFOUND, %ROWCOUNT Utilice %ROWCOUNT para recuperar un número exacto de filas. Utilice %NOTFOUND para determinar cuándo salir del bucle de lectura del cursor. Antes de la primera recuperación, %NOTFOUND es NULL, así que si FETCH no se ejecuta nunca satisfactoriamente, no se saldría nunca del bucle de lectura. Ejemplo %NOTFOUND, %ROWCOUNT LOOP FETCH cursor_nombre INTO vename, vdeptno; IF cursor_nombre%ROWCOUNT > 20 THEN … END IF EXIT WHEN cursor_nombre%NOTFOUND OR cursor_nombre%NOTFOUND IS NULL END LOOP; 4) Bucles FOR de Cursor Sintaxis FOR nombre_registro IN nombre_cursor LOOP Sentencia1; … END LOOP;
  • 4. Apertura, recuperación y cierre implícitos. No declare el registro, está declarado implícitamente. 5) Cursores con Parámetros Sintaxis 1 CURSOR nombre_cursor [(nombre_parámetro tipo_de_dato, …)] IS sentencia_select; Permite abrir un cursor varias veces con un juego activo distinto cada vez. Sintaxis 2 CURSOR nombre_cursor nombre_parámetro [IN] tipo_de_dato [{:= | DEFAULT}] expresión] IS sentencia_select; Cada parámetro formal de la declaración del cursor debe tener un parámetro real correspondiente en la sentencia OPEN. Ejemplo DECLARE CURSOR cursor_empleados (v_deptno NUBER, v_job VARCHAR2) IS SELECT ename, sal, hiredate FROM emp WHERE deptno = v_deptno AND title = v_job; BEGIN; Transfiera el número de departamento y el cargo a la cláusula WHERE: 6) Cláusula FOR UPDATE Sintaxis SELECT … FROM … FOR UPDATE [OF nombre_columna] [NOWAIT] El bloqueo explícito le permite denegar el acceso mientras dura una transacción. Bloquee las filas antes de la actualización o supresión. La cláusula FOR UPDATE es la última cláusula de una sentencia SELECT, incluso después del ORDER BY.
  • 5. NOWAIT devuelve un error de Oracle si las filas han sido bloqueadas por otra sesión, de lo contrario se espera. 7) Cláusula WHERE CURRENT OF {UPDATE | DELETE} …. WHERE CURRENT OF nombre_cursor; Incluya la cláusula FOR UPDATE en la definición del cursor para bloquear las filas. Especifique WHERE CURRENT OF en la sentencia UPDATE o DELETE para referirse a la fila actual del cursor. Ejercicio1: Programa que imprima el ranquin de ventas por empleados (titulo,puesto,nomemp,codigo,monto.). DECLARE CURSOR CUR_RANKING IS SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL FROM EMP E LEFT JOIN ORD O ON E.EMPNO = O.EMPNO GROUP BY E.EMPNO,E.ENAME ORDER BY 3 DESC; REG_RANKING CUR_RANKING%ROWTYPE; V_POSICION NUMBER(4,2):=1; BEGIN DBMS_OUTPUT.PUT_LINE('RANKING DE EMPLEADOS POR VENTA'); DBMS_OUTPUT.PUT_LINE(RPAD('*',100,'*')); OPEN CUR_RANKING; LOOP FETCH CUR_RANKING INTO REG_RANKING; EXIT WHEN CUR_RANKING%NOTFOUND; /* PROCESAMIENTO DE LOSREGISTROS RECUPERADOS */ DBMS_OUTPUT.PUT_LINE(RPAD(V_POSICION,10) || RPAD(REG_RANKING.EMPNO,10) || RPAD(REG_RANKING.ENAME,20) || RPAD(REG_RANKING.TOTAL,10)); END LOOP; CLOSE CUR_RANKING; END; / Ejercicio2:
  • 6. PROGRAMA QUE ACTUALIZE LAS COMISIONES A TODOS LOS EMPLEADOS MENOS DE 5000 3% DE LAS VENTAS MAS DE 5000 5% DE LAS VENTAS DECLARE CURSOR CUR_RANKING IS SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL FROM EMP E LEFT JOIN ORD O ON E.EMPNO = O.EMPNO GROUP BY E.EMPNO,E.ENAME ORDER BY 3 DESC; REG_RANKING CUR_RANKING%ROWTYPE; V_COMISION NUMBER(8,2); BEGIN OPEN CUR_RANKING; LOOP FETCH CUR_RANKING INTO REG_RANKING; EXIT WHEN CUR_RANKING%NOTFOUND; if REG_RANKING.TOTAL < 5000 then V_COMISION :=0.03 * REG_RANKING.TOTAL; else V_COMISION :=0.05 * REG_RANKING.TOTAL; end if; update emp set comm =V_COMISION where empno = REG_RANKING.EMPNO; COMMIT; END LOOP; CLOSE CUR_RANKING; END; / Ejercicio3: Programa que imprima el ranquin de ventas por empleados (titulo,puesto,nomemp,codigo,monto.). declare CURSOR CUR_RANKING IS SELECT E.EMPNO,E.ENAME, SUM(O.TOTAL) TOTAL FROM EMP E LEFT JOIN ORD O ON E.EMPNO = O.EMPNO GROUP BY E.EMPNO,E.ENAME ORDER BY 3 DESC;
  • 7. REG_RANKING CUR_RANKING%ROWTYPE; V_COMISION NUMBER(8,2); begin OPEN CUR_RANKING; FETCH CUR_RANKING INTO REG_RANKING; FOR REG_RANKING IN CUR_RANKING LOOP if REG_RANKING.TOTAL < 5000 then V_COMISION :=0.03 * REG_RANKING.TOTAL; else V_COMISION :=0.05 * REG_RANKING.TOTAL; end if; update emp set comm =V_COMISION where empno = REG_RANKING.EMPNO; COMMIT; END LOOP; CLOSE CUR_RANKING; end; / Propuesto Incrementar la comisión, en función del salario, de los empleados de Bostón y Nueva York según su antigüedad y cargo¸según la siguiente tabla: Fuente de apoyo: http://www.mundoracle.com/cursores.html