Download - Laboratorio PLSQL
LABORATORIO PLSQL
04.06.2012
Nombre : Elizabeth Morales A.
Profesor: Cristian Salazar
Ayudante: José Luis Carrasco
Curso: ADMI 273
Valdivia 15 Junio del 2012
1.- Se solicita obtener mediante una función el resultado de la multiplicación de 8 por
9.
create or replace function ochopornueve return number is
Resultado number;
begin
Resultado:= 8 * 9;
return Resultado;
end ochopornueve;
begin
:result := ochopornueve;
end;
2.- Se solicita obtener mediante una función el resultado de la división de 4 por 55.
create or replace function cuatrodivcinuentaycinco return number is
Resultado number ;
begin
Resultado:=4/55;
return Resultado;
end cuatrodivcinuentaycinco;
begin
:result := cuatrodivcinuentaycinco;
end;
3.- Investigar el uso de parámetros en una función, y desarrolle una función para cada
uno de los siguientes ejercicios:
a) F(X,Y) = X+Y
create or replace function xmasy(x integer, y integer) return integer is
Resultado number ;
begin
Resultado:= x+y;
return Resultado;
end xmasy;
begin
:result := xmasy(x => :x,
y => :y);
end;
b) F(X,Y,Z) = (X+Y)*Z
create or replace function xmasyporz(x integer, y integer, z integer) return integer is
Resultado integer;
begin
Resultado:=(x+y)*z;
return Resultado;
end xmasyporz;
begin
:result := xmasyporz(x => :x,
y => :y,
z => :z);
end;
c) F(W,X,Y,Z) = W(X-1)(Y-Z)(Z+2)
create or replace function wxyz(w integer,x integer, y integer, z integer) return number is
Resultado number;
begin
Resultado:=W*(X-1)*(Y-Z)*(Z+2);
return Resultado;
end wxyz;
begin
:result := wxyz(w => :w,
x => :x,
y => :y,
z => :z);
end;
4.- Investigue el uso de la sentencia “INTO”.
Indica la tabla a la cual se le asignaran ciertos valores, por ejemplo si en una base
de datos quiero ingresar el rut y nombre de una personar, se podría hacer de la siguiente
forma:
INSERT INTO Nombre_tabla(rut, nombre) VALUES ('16.235.643-8','Juan
Pérez');
5.- Se define que la morosidad excesiva es referida a cuando un estudiante no ha
hecho entrega de un préstamo por un tiempo igual o superior a 20 días. Realice una
función que entregue el N° de préstamos con Morosidad Excesiva.
create or replace function MorosidadExcesiva return number is
Resultado number;
begin
select count(*)
into resultado
from prestamo p
where (trunc(sysdate) - p.fecha_e) >= 20;
return resultado;
end MorosidadExcesiva;
begin
:result := morosidadexcesiva;
end;
6.- Desarrolle lo mismo que en el ejercicio 5, solo que esta vez el valor de 20 días
pueda ser variable, esto es pasándolo como parámetro a la función.
create or replace function MorosidadExcesivaVar(dias number) return number is
Result number;
begin
select count(*)
into Result
from prestamo p, estudiantes e
where e.rut_est = p.rut_est
and (trunc(sysdate) - (p.fecha_e)) >=dias;
return Result;
end MorosidadExcesivaVar;
begin
:result := morosidadexcesivavar(dias => :dias);
end;
7.- Se solicita pasar por parámetro a la función el número de días a evaluar y el valor
por día de atraso. Se debe entregar el valor total de las deudas adquiridas por todo el
alumnado.
create or replace function montomorosidad(dias number, monto number)
return number is
Result number;
begin
select monto*count(*)
into Result
from prestamo p, estudiantes e
where e.rut_est = p.rut_est
and (trunc(sysdate) - (p.fecha_e)) >= dias;
return Result;
end montomorosidad;
begin
:result := montomorosidad(dias => :dias,
monto => :monto);
end;
8.- Investigue cual es la diferencia entre FUNCTION y PROCEDURE en PLSQL.
La principal diferencia entre Function y Procedure en PLSQL es que la función siempre
devuelve un valor, en cambio el procedimiento siempre necesita parámetros de entrada.
Para saber si utilizar Function o Procedure lo principal es analizar si se necesitarán
parámetros de entrada y salida (Procedure) o si se necesita obtener un solo resultado de
salida (Function).
9.- Lea los artículos de INSERT, UPDATE y DELETE que se encuentran en
Definiciones al final de este documento.
10.- Realice un procedimiento (PROCEDURE) que reciba como parámetro el Rut del
Estudiante, el Código del Libro y el Rut del Funcionario. Este procedimiento debe
ingresar un préstamo, considerando que todos los libros se prestan por 3 días. (Usar
INSERT y SYSDATE)
create or replace procedure iprestamo(rut_e in float, rut_f in float , cod_l in number) is
begin
insert into PRESTAMO (rut_est,rut_func, cod_libro, FECHA_P,FECHA_E)
values (rut_e, rut_f,cod_l, trunc(sysdate), trunc(sysdate)+2);
end iprestamo;
begin
iprestamo(rut_e => :rut_e,
rut_f => :rut_f,
cod_l => :cod_l);
end;
11.- Realice un procedimiento que entregue un libro, esto es ingresando el Rut del
Estudiante y el Libro respectivamente (Usar DELETE).
create or replace procedure entregalibro(rut in number, libro in number) is
begin
DELETE FROM prestamo
where cod_libro = libro
and rut_est = rut;
end entregalibro;
begin
entregalibro(rut => :rut,
libro => :libro);
end;
12.- Realizar un procedimiento que realice lo mismo que el ejercicio 7, pero que se le
entreguen 2 parámetros (días a evaluar y valor por día de atraso en pesos chilenos) y
muestre 3 parámetros de salida (deuda total del alumnado en pesos chilenos, en euros
y en dólares).
create or replace procedure ejer12(dias in number,
multa in number,
Multa_Acumulada_clp out number,
Multa_Acumulada_usd out number,
Multa_Acumulada_eur out number) is
begin
select multa * count(*),
multa * count(*) / 504, /* Precio del Dólar al día 13/06/2012 */
multa * count(*) / 633.56 /* Precio del Euro al día 13/06/2012 */
into Multa_Acumulada_clp, Multa_Acumulada_usd, Multa_Acumulada_eur
from prestamo p, estudiantes e
where e.rut_est = p.rut_est
and (trunc(sysdate) - (p.fecha_e)) >= dias;
end ejer12;
begin
ejer12(dias => :dias,
multa => :multa,
multa_acumulada_clp => :multa_acumulada_clp,
multa_acumulada_usd => :multa_acumulada_usd,
multa_acumulada_eur => :multa_acumulada_eur);
end;