SlideShare una empresa de Scribd logo
1 de 7
/*
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

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 

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

Conexion a la base de datos
Conexion a la base de datosConexion a la base de datos
Conexion a la base de datos
OscSoft
 
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 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 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)

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
 
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
 
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
 

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

La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
JonathanCovena1
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
MiNeyi1
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
MiNeyi1
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
NancyLoaa
 

Último (20)

Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 

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