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

DOCX
Sesion06b - Introducción al PL-SQL (Oracle)
DOCX
Sesion05 - Manipulacion de datos (Oracle)
DOCX
Sesion07- Estructuras de control (Oracle)
DOCX
Sesion09 - Manejo de Excepciones (Oracle)
DOCX
Sesión11 - Paquetes (Oracle)
DOCX
Sesion10 - Funciones y procedimientos (Oracle)
DOCX
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
DOCX
Sesión03 - Creación de objetos (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)
Sesion05 - Manipulacion de datos (Oracle)
Sesion07- Estructuras de control (Oracle)
Sesion09 - Manejo de Excepciones (Oracle)
Sesión11 - Paquetes (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)
Sesion06c - Sentencias SQL en PL-SQL (Oracle)
Sesión03 - Creación de objetos (Oracle)

La actualidad más candente (20)

DOCX
Sesion06a - Manipulacion de datos (Oracle)
PDF
Forms 10g procedimientos y cursores
DOCX
Sesión12 - Trigger (Oracle)
DOCX
Sesión04 - Diccionario de datos (Oracle)
DOCX
Sesión02 - Creación de objetos (Oracle)
PPS
Curso Básico de Pl Sql Oracle
DOCX
Oracle pl sql
PDF
Apunte plsql
PDF
Plsql y paquetes
PPTX
Lenguaje transact sql
PPTX
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
PDF
PPT
7.1. procedimientos almacenados
PDF
Programación MySQL-Ejercicios
PPT
Disparadores
PDF
HTML5 API WebSQL Database: DML: Data Manipulation Language
PPTX
Otros Objetos de Esquemas Z051 Cap 12
DOCX
PDF
HTML5 API WebSQL Database: Funciones de agregado
Sesion06a - Manipulacion de datos (Oracle)
Forms 10g procedimientos y cursores
Sesión12 - Trigger (Oracle)
Sesión04 - Diccionario de datos (Oracle)
Sesión02 - Creación de objetos (Oracle)
Curso Básico de Pl Sql Oracle
Oracle pl sql
Apunte plsql
Plsql y paquetes
Lenguaje transact sql
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
7.1. procedimientos almacenados
Programación MySQL-Ejercicios
Disparadores
HTML5 API WebSQL Database: DML: Data Manipulation Language
Otros Objetos de Esquemas Z051 Cap 12
HTML5 API WebSQL Database: Funciones de agregado
Publicidad

Destacado (18)

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

Similar a Sesion08 - Cursores (Oracle) (20)

PPT
Semana 5 y 6 cursores implícitos y explícitos
PPTX
Cursores
PPTX
SESION-07.pptx
PPTX
1 clase de Ps /sql
DOC
Ejemplos u4
PPTX
5-cursores-18050415fhdhdhdhdh5828 (2).pptx
PPTX
PL SQL Diplomado Oracle
PPT
nnnmmmgghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhg.ppt
DOCX
Base datos mysql y visual basic
PPT
7090112 Clase Transact Sql Server
PPTX
Unidad vi esp parte 2 procesimientos en plsql y transact sql
PPTX
Unidad vi esp parte 2 procesimientos en plsql y transact sql
PDF
Conceptos_basicos_de_programacion_con_PL.pdf
PDF
Conceptos basicos de programacion con pl sql
PDF
PLSQL y paquetes
Semana 5 y 6 cursores implícitos y explícitos
Cursores
SESION-07.pptx
1 clase de Ps /sql
Ejemplos u4
5-cursores-18050415fhdhdhdhdh5828 (2).pptx
PL SQL Diplomado Oracle
nnnmmmgghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhg.ppt
Base datos mysql y visual basic
7090112 Clase Transact Sql Server
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Conceptos_basicos_de_programacion_con_PL.pdf
Conceptos basicos de programacion con pl sql
PLSQL y paquetes

Último (20)

PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
DOCX
Tarea De El Colegio Coding For Kids 1 y 2
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
Metodologías Activas con herramientas IAG
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Tarea De El Colegio Coding For Kids 1 y 2
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
Metodologías Activas con herramientas IAG
caso clínico iam clinica y semiología l3.pptx
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
DI, TEA, TDAH.pdf guía se secuencias didacticas
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
ciencias-1.pdf libro cuarto basico niños
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
Tomo 1 de biologia gratis ultra plusenmas
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
Fundamentos_Educacion_a_Distancia_ABC.pdf
Escuelas Desarmando una mirada subjetiva a la educación
V UNIDAD - SEGUNDO GRADO. del mes de agosto

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