Está en la página 1de 6

Admin De Base De Datos

Clase - 4001

Taller 3 Manejo de Cursores corte 2

Profesor
Maria Claudia Bonfante Rodriguez

Estudiante
Jota Mario Baleta Cueto

Cartagena – Colombia
2020
Descripción de cada una de la(s) Actividad(es)

Realice los siguientes procedimientos con cursores:

1. Incrementar la comisión, en función del salario, de los empleados que pertenecen al departamento
ubicado en Bostón se debe tener en cuenta su antigüedad, y para los empleados que trabajen en el
departamento ubicado en New York se debe tener en cuenta el cargo según la siguiente tabla:
set serveroutput on
declare

cursor prod_pedido is
select a.ename, a.job, a.sal, NVL(a.comm, '0') comis,a.deptno,ROUND((SYSDATE-a.hiredate)/365,0) edad, b.loc
from emp a, dept b
WHERE a.deptno = b.deptno AND b.loc='NEW YORK' OR b.loc='BOSTON' ;
incremento emp.sal%type;

begin

for registro in prod_pedido loop


CASE registro.loc

WHEN 'BOSTON' THEN


if registro.edad>=0 and registro.edad<=9 then
incremento := REGISTRO.SAL*0.10+REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
else if registro.edad>=10 and registro.edad<=20 then
incremento := REGISTRO.SAL*0.15+REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
else
incremento := REGISTRO.SAL*0.20+REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
end if;
end if;

WHEN 'NEW YORK' THEN


if registro.job='MANAGER' then
incremento :=REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
else if registro.job='ANALYST' then
incremento := REGISTRO.SAL*0.12+REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
else
incremento := REGISTRO.SAL*0.17+REGISTRO.comis;
dbms_output.put_line('Empleado '|| registro.ename || ' Puesto ' || registro.job || ' Salario '|| registro.sal || ' Comision
'||incremento||' Ciudad '||registro.loc||'');
end if;
end if;

ELSE
dbms_output.put_line('No cumple Ninguna Condicion');
END CASE;

end loop;

end;
2. Diseñar un procedimiento que simule un listado de liquidación de los empleados según las siguientes
especificaciones:

- El listado tendrá el siguiente formato para cada empleado que pertenezca al departamento 10:
**********************************************************************
Liquidación del empleado:...................(1) Dpto:.................(2) Oficio:...........(3)

Salario :
............(4)
Antiguedad
:.............(5)
Comp. Responsabilidad :.............(6)
Comisión :.............(7)
------------
Total :.............(8)
*************************************************************
********* Donde:
1 ,2, 3 y 4 Corresponden al apellido, departamento, oficio y salario del empleado.
5 Es el concepto por antigüedad. Esto solo le corresponderá al empleado que tiene más de 5 años en la
empresa, y su valor es es 5000 dólares.
6 Es el complemento por responsabilidad. Será de 1.000 dólares por cada empleado que sea jefe de otro
(utilizar la columna MGR)
7 Es la comisión del empleado. Los valores nulos serán sustituidos por ceros.
8 Suma de todos los conceptos
anteriores. El listado irá ordenado
por Apellido
set serveroutput on
declare

cursor prod_pedido is
select ename, job, sal, NVL(comm, '0') comis,deptno,ROUND((SYSDATE-hiredate)/365,0) anos,mgr
from emp
WHERE deptno =10 order by ename;
total integer;
antiguedad integer;
respon integer;

begin

for registro in prod_pedido loop


IF registro.mgr is null and registro.anos >= 6 then
dbms_output.put_line('Empleado '|| registro.ename || ' Dpto ' || registro.deptno || ' Oficio '|| registro.job || '');
dbms_output.put_line('Salario '|| registro.sal || '');
antiguedad := 5000;
dbms_output.put_line('Antiguedad '||antiguedad);
respon := 1000;
dbms_output.put_line('Comp. Responsabilidad '||respon);
dbms_output.put_line('Comision '|| registro.comis||'');
total := registro.sal+antiguedad+respon+registro.comis;
dbms_output.put_line('Total: '||total);
dbms_output.put_line('');
ELSE IF registro.anos >= 6 then
dbms_output.put_line('Empleado '|| registro.ename || ' Dpto ' || registro.deptno || ' Oficio '|| registro.job || '');
dbms_output.put_line('Salario '|| registro.sal || '');
antiguedad := 5000;
dbms_output.put_line('Antiguedad '||antiguedad);
respon := 0;
dbms_output.put_line('Comp. Responsabilidad '||respon);
dbms_output.put_line('Comision '|| registro.comis||'');
total := registro.sal+antiguedad+respon+registro.comis;
dbms_output.put_line('Total: '||total);
dbms_output.put_line('');
ElSE
dbms_output.put_line('Empleado '|| registro.ename || ' Dpto ' || registro.deptno || ' Oficio '|| registro.job || '');
dbms_output.put_line('Salario '|| registro.sal || '');
antiguedad := 0;
dbms_output.put_line('Antiguedad '||antiguedad);
respon := 0;
dbms_output.put_line('Comp. Responsabilidad '||respon);
dbms_output.put_line('Comision '|| registro.comis||'');
total := registro.sal+antiguedad+respon+registro.comis;
dbms_output.put_line('Total: '||total);
dbms_output.put_line('');
END IF;
END IF;
end loop;

end;

También podría gustarte