laboratorio plsql

8
LABORATORIO PLSQL 04.06.2012 Nombre : Elizabeth Morales A. Profesor: Cristian Salazar Ayudante: José Luis Carrasco Curso: ADMI 273 Valdivia 15 Junio del 2012

Upload: elizabeth-morales

Post on 23-Mar-2016

214 views

Category:

Documents


2 download

DESCRIPTION

Solución de ejercicios el PLSQL

TRANSCRIPT

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;