Procedimientos PL/SQL con cursores: WHILE y FOR en Oracle

Economía3,22 KB

Procedimientos PL/SQL con cursores: WHILE y FOR

A continuación se presentan ejemplos de procedimientos almacenados en PL/SQL que utilizan cursores con las estructuras WHILE y FOR.

1. Apellido y fecha de alta de los empleados

Desarrollar un procedimiento que visualice el apellido y la fecha de alta de todos los empleados ordenados por apellido.

Versión con WHILE

WHILE

create or replace procedure APELLIDO_FECHA_
AS
Cursor cur1 IS select nombre,fecha_alt from emple order by 1 asc;
apel emple.nombre%type;
fecha emple.fecha_alt%type;
BEGIN
Open cur1;
fetch cur1 INTO apel,fecha;
while cur1%found loop
dbms_output.put_line(apel||'  '||fecha);
fetch cur1 INTO apel,fecha;
end loop;
close cur1;
end APELLIDO_FECHA_;
/

Versión con FOR

FOR

create or replace procedure APELLIDO_FECHA_
AS
Cursor cur1 IS select nombre,fecha_alt from emple order by 1 asc;
BEGIN
FOR Y IN cur1 loop
dbms_output.put_line(Y.nombre||'  '||Y.fecha_alt);
end loop;
end APELLIDO_FECHA_;
/

2. Número de departamento y número de empleados

Codificar un procedimiento que muestre el número de cada departamento y el número de empleados que tiene. Usar FOR y WHILE.

Versión con WHILE

WHILE

create or replace procedure DEPARTAMENT_NUM_EMPLE
as
CURSOR cur11 IS select dept_no,count(emp_no) from emple group by dept_no;
nombre_departamento emple.dept_no%type;
total_empleados emple.emp_no%type;
begin
OPEN cur11;
fetch cur11 INTO nombre_departamento,total_empleados;
while cur11%found loop
dbms_output.put_line(nombre_departamento||' '||total_empleados);
fetch cur11 INTO nombre_departamento,total_empleados;
end loop;
CLOSE cur11;
end DEPARTAMENT_NUM_EMPLE;
/

Versión con FOR

FOR

create or replace procedure DEPARTAMENT_NUM_EMPLE
as
CURSOR cur11 IS select dept_no,count(emp_no) "TOTAL" from emple group by dept_no;
begin
FOR X IN cur11 loop
dbms_output.put_line(X.dept_no||' '||X.TOTAL);
end loop;
end DEPARTAMENT_NUM_EMPLE;
/

3. Actualización de salarios por departamento

Procedimiento que actualiza el salario de los empleados de un departamento. Si el incremento calculado por porcentaje supera el importe indicado, se aplica el porcentaje; en caso contrario, se aplica el importe fijo.

WHILE

CREATE or replace PROCEDURE NUEVO
(num_dept number, importe number, porcentaje number)
as
Cursor cur1 IS select salario,emp_no from emple where dept_no=num_dept;
Sal emple.salario%type;
numero emple.emp_no%type;
Salario_total number;
begin
open cur1;
fetch cur1 INTO sal,numero;
while cur1%found loop
salario_total := sal*porcentaje;
if salario_total > importe then
UPDATE emple set salario = salario + salario_total where emp_no = numero;
else
UPDATE emple set salario = salario + importe where emp_no = numero;
end if;
fetch cur1 INTO sal,numero;
end loop;
close cur1;
end NUEVO;
/

Descargar

PDF Word HTML