Sie sind auf Seite 1von 4

INDRA - Introduccion a PL/SQL

Practica3 Estructuras de Control

Ejercicio 1 ) Bloque IF Uso de Else Pag. 5


Realizar un pl/sql que busque en la base HR en la tabla EMPLOYEES el legajo del empleado David
Lee.
Verificar si el legajo es multiplo de 5.
Multiplo: utilizar la funcion MOD
Ejercicio 2) Bloque IF Anidamiento Pag. 7
Realizar un pl/sql que ingrese por teclado 3 codigos de empleado . Por cada uno busque la HIRE_DATE.,
mostrar por pantalla el valor de HIRE_DATE que no es el menor ni el mayor ( Si hay dos fechas iguales
emitir un mensaje informando que termina sin calcular)
Ejercicio 3) Bloque IF USO DE ELSE-IF Pag. 8
Utilizando el pl-sql indicado a continuacin, sobre la fecha ingresada y ya validada, se debe verificar si el
dia del mes es 7, se calcula una bonificacion en las compras del 10%, si es dia 14 se calcula una
bonificacion del 13%, en otros dias no hay descuentos.
Imprimir una leyenda indicando el porcentaje que corresponde de acuerdo a la fecha ingresada.
declare
dd number;
mm number;
aa number;
fecha DATE;
dia_mal EXCEPTION;
mes_mal EXCEPTION;
PRAGMA EXCEPTION_INIT (dia_mal, -01847);
PRAGMA EXCEPTION_INIT (mes_mal, -01843);
PRAGMA EXCEPTION_INIT (mes_mal, -01843);
begin
dd:=&dia;
mm:=&mes;
aa:=&anio;
dbms_output.put_line(' La fecha es : ' || TO_CHAR(dd) ||'/' || to_char(mm) ||
'/' || to_char(aa) );
fecha:= to_date( TO_CHAR(dd) ||'/' || to_char(mm) ||
'/' || to_char(aa) , 'dd/mm/yy' );
EXCEPTION
WHEN mes_mal THEN DBMS_OUTPUT.PUT_LINE('ERROR el mes es entre 1 y 12...');
WHEN dia_mal THEN DBMS_OUTPUT.PUT_LINE('ERROR el dia es entre 1 y 31...');
end;
/

Ejercicio 4 ) Bloque CASE SIMPLE Pag. 10


Utilizando el ejemplo anterior, resolver el mismo problema con bloques CASE SIMPLES.
Ejercicio 5) CASE Extendido Pag.12
En el esquema HR, realizar los siguientes Inserts de programadores en el departamento de IT en los
ltimos aos
insert into employees (
EMPLOYEE_ID ,
FIRST_NAME ,
LAST_NAME ,
EMAIL ,
HIRE_DATE ,
JOB_ID ,
DEPARTMENT_ID )
values
( EMPLOYEES_SEQ.nextval ,
'ALISSON' ,
'JUCARY' ,
'ALISSONJ@GMAIL.COM',
to_date('12/04/2007','dd/mm/yyyy'),
'IT_PROG',
60
);
insert into employees (
EMPLOYEE_ID ,
FIRST_NAME ,
LAST_NAME ,
EMAIL ,
HIRE_DATE ,
JOB_ID ,
DEPARTMENT_ID )
values
( EMPLOYEES_SEQ.nextval ,
'JONATHAN' ,
'JUCARY' ,
'JONATHAN@GMAIL.COM',
to_date('12/04/2009','dd/mm/yyyy'),
'IT_PROG',
60
);
insert into employees (
EMPLOYEE_ID ,
FIRST_NAME ,
LAST_NAME ,
EMAIL ,
HIRE_DATE ,
JOB_ID ,
DEPARTMENT_ID )
values
( EMPLOYEES_SEQ.nextval ,
'PASOS' ,
'MAGDALENA' ,
'MAGDALENAP@GMAIL.COM',
to_date('12/06/2011','dd/mm/yyyy'),
'IT_PROG',
60
);

Realizar un pl/sql que utilizando el siguiente query 1 ( que solicita el ingreso del Nombre y apellido del
programador y devuelve la fecha de ingreso, el sysdate y la cantidad de aos trabajados ) de acuerdo a
cantidad de aos trabajados devuelva la siguiente categoria.
JUNIOR: menor de 3 aos de antigedad en el puesto IT_PROG
SEMI SENIOR: entre 3 y 5 aos
SENIOR: mas de 5 aos.
Query 1:
SELECT E.HIRE_DATE, SYSDATE , ( SYSDATE - E.HIRE_DATE)/365
FROM EMPLOYEES E, DEPARTMENTS D
WHERE DEPARTMENT_NAME = 'IT'
AND E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND E.LAST_NAME = '&APELL'
AND E.FIRST_NAME ='&NOMBR'
and E.JOB_ID = 'IT_PROG'
Controlar la exception EXCEPTION WHEN NO_DATA_FOUND para imprimir una leyenda de que no hay
empleados IT_PROD del departamento IT.

Ejercicio 6) Bloque LOOP Basico Pag.15


Ingresar una lista de edades entre 18 y 20. Imprimir la cantidad de veces que se ingreso cada edad.
Las edades ingresadas que no correspondan no se toman en cuenta.
El lote termina con una edad = 0 .
Generar una variable global edades , que sea la misma que el contador del ciclo for. Referenciarla con
una etiqueta.Pag.58
Ejercicio 7) Bloque LOOP clausula EXIT/WHEN Pag.17
7.1) Ingresar N edades. Contar cuantas edades estn entre 18 y 20 . Imprimir el resultado.
7.2) Realizar un pl/sql que abra un cursor explicito en la tabla EMPLOYEES y con un ciclo imprima el
FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY . EL ciclo termina cuando no haya mas empleados
Ejercicio 8 ) Anidamiento / Bucles etiquetados Pag.19
8.1) Ingresar numeros correspondiente a valores de filas de una matriz. Mostrando un mensaje
indicando el numero de fila.
Por cada valor de fila ingresado, ingresar una lista de valores correspondientes a las columnas. El
ingreso de valores de columnas
termina con 0.
El fin de ingreso de valores de filas termina con -1.
Etiquetar los ciclos de filas y coluimnas . Pag 59
8.2) Realizar un pl/sql que abra un cursor explicito por departamentos y otro por empleados. Imprima de
cada departamento la lista de sus empleados.
Ejercicio 9 Pag.20- Pag.17
Ingresar el proyecto y la cantidad de incidencias . El ingreso finaliza con un cdigo de proyecto 0.
De la cantidad de incidencias, obtener el conjunto de incidencias del bloque de todos los proyectos.
Ejercicio 10 Pag.20-Pag.17
10.1) Ingresar un conjunto de valores de sueldos de empleados. El sueldo 0 termina el Ingreso de
sueldos. Informar la cantidad de sueldos entre 4000 y 8000
10.2) Leer con un cursor
Ejercicio 11

11.1) De los nmeros del 3 al 20, promediar los pares. Pag.22


11.2) Recorrer los numkeros del 20 al 3, promediar los impares. Pag.24
11.2) Recorrer los legajos del 160 al 170 en la base HR de a dos legajos, recuperar el salary de cada
empleado y promediarlo con el total de empleados recuperados.
11.3) Ingresar un numero de departamento valido por teclado. Pag.35
Recuperar los datos del departamento, controlar que no exista.
Recuperar la cantidad de empleados del departamento.
Imprimir
Departamento de la comuna : department_id department_name
Abrir un cursor con cada empleado del departamento
Iterar de acuerdo a la cantidad de departamentos y por cada iteracin realizar un fetch de cada
empleados
1 empleado : employee_id - first_name last_name
2 empleado : employee_id - first_name last_name
..
N --- ( cantidad de empleados) employee_id - first_name last_name
Ejercicio 12
Ingresar un numero N, calcular el factorial de N.( Fact:=fact*i ). Salvar el caso del 0 y nmeros negativos.

Das könnte Ihnen auch gefallen