laboratorio 05-06-2012

6
UNIVERSIDAD AUSTRAL DE CHILE FACULTAD DE CIENCIAS ECONÓMICAS Y ADMINISTRATIVAS ESCUELA DE AUDITORÍA CURSO: SISTEMAS DE INFORMACION ADMINISTRATIVOS Lab 04_06: Procedimientos y Funciones Orlando Esteban Miranda Rojas

Upload: orlando-rojas

Post on 29-Mar-2016

216 views

Category:

Documents


0 download

DESCRIPTION

Taller de ayudantia

TRANSCRIPT

Page 1: Laboratorio 05-06-2012

UNIVERSIDAD AUSTRAL DE CHILE

FACULTAD DE CIENCIAS ECONÓMICAS Y ADMINISTRATIVAS

ESCUELA DE AUDITORÍA

CURSO: SISTEMAS DE INFORMACION ADMINISTRATIVOS

Lab 04_06: Procedimientos y FuncionesOrlando Esteban Miranda Rojas

Viernes 15-06-2012

Page 2: Laboratorio 05-06-2012

1.- Se solicita obtener mediante una función el resultado de la multiplicación de 8 por 9.

CREATE OR REPLACE FUNCTION MULT9POR8 RETURN NUMBER ISRESULTADO NUMBER;BEGINRESULTADO := 8 * 9;RETURN RESULTADO;END MULT9POR8;

2.- Se solicita obtener mediante una función el resultado de la división de 4 por 55.

CREATE OR REPLACE FUNCTION DIV4POR55 RETURN NUMBER ISRESULTADO NUMBER;BEGINRESULTADO := 4 / 55;RETURN RESULTADO;END DIV4POR55;

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

b) F(X,Y,Z) = (X+Y)*Z

c) F(W,X,Y,Z) = W(X-1)(Y-Z)(Z+2)

Desarrollo:

A. CREATE OR REPLACE FUNCTION fDeXeY(X NUMBER, Y NUMBER) RETURN NUMBER IS RESULTADO NUMBER;BEGIN RESULTADO := X + Y; RETURN RESULTADO;END fDeXeY;

B. CREATE OR REPLACE FUNCTION fDeXeYPorZ(X NUMBER, Y NUMBER, Z NUMBER) RETURN NUMBER IS RESULTADO NUMBER;BEGIN RESULTADO := (X + Y)*Z; RETURN RESULTADO;END fDeXeYPorZ;

C. CREATE OR REPLACE FUNCTION WXYZ(W NUMBER, X NUMBER, Y NUMBER, Z NUMBER) RETURN NUMBER IS A NUMBER; B NUMBER; RESULTADO NUMBER;BEGIN A := 1; B := 2; RESULTADO := W * (X - A) * (Y - Z) * (Z + B); RETURN RESULTADO;END WXYZ;

Page 3: Laboratorio 05-06-2012

4.- Investigue el uso de la sentencia “INTO”.

La clausura del Oracle PL/SQL “INTO” se usa en los bloques PL/SQL para obtener los resultados de la consulta SELECT en una variable local. Las columnas seleccionadas en las consultas deben ser devueltas en las variables locales, que deben ser compatibles con las columnas de tipos de datos. También se ocupa en el archivo ejecutable (BEGIN…END) sección de un bloque PL/SQL.

El uso por defecto la clausula (SELECT…INTO), la sentencia recupera una o mas columnas de una sola fila. En el uso general (SELECT…BULK COLLECT INTO), la sentencia recupera un conjunto de resultados completo en una sola operación.

Por defecto, la declaración (SELECT…INTO) solo puede devolver una sola fila. Si se devuelve más de una fila, PL/SQL produce la excepción predefinida TOO_MANY_ROWS (SQL ERROR 02112).

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 MOROCIDAD RETURN NUMBER IS MOROSOS NUMBER;BEGINSELECT COUNT(*)INTO MOROSOSFROM PRESTAMO PWHERE TRUNC(SYSDATE) - P.FECHA_E >= 20;RETURN MOROSOS;END MOROCIDAD;

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 MOROSIDAD2(X IN NUMBER) RETURN NUMBER IS MOROSOS NUMBER;BEGINSELECT COUNT(*)INTO MOROSOSFROM PRESTAMO PWHERE TRUNC(SYSDATE) - P.FECHA_E >= X;RETURN MOROSOS;END MOROSIDAD2;

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 CALCULO_DEUDA(DIAS_ATRASO IN NUMBER, VALOR_DIARIO IN NUMBER)RETURN NUMBER ISRESULT NUMBER;BEGINSELECT SUM(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) * VALOR_DIARIO AS DEUDA_TOTAL INTO RESULTFROM PRESTAMO PWHERE(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) >= DIAS_ATRASO;RETURN RESULT;END CALCULO_DEUDA;

Page 4: Laboratorio 05-06-2012

8.- Investigue cual es la diferencia entre FUNCTION y PROCEDURE en PLSQL.

La única diferencia entre procedimientos y funciones en PL/SQL es que las funciones siempre devuelven un valor único, mientras que los procedimientos no devuelven un valor a la persona que llama.

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 INGRESAR_PRESTAMO(RUT_ESTUDIANTE IN NUMBER,RUT_FUNCIONARIO IN NUMBER,CODIGO_LIBRO IN NUMBER) IS BEGIN INSERT INTO PRESTAMO(RUT_EST, RUT_FUNC, COD_LIBRO, FECHA_P, FECHA_E)VALUES(RUT_ESTUDIANTE, RUT_FUNCIONARIO,CODIGO_LIBRO,TRUNC(SYSDATE),TRUNC(SYSDATE) + 3);END INGRESAR_PRESTAMO;

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 LIBRO_ENTREGA(RUT_EST IN NUMBER, RUT_FUN IN NUMBER, COD_LIBRO IN NUMBER)IS BEGIN DELETE FROM PRESTAMO PWHERE P_RUT_EST=RUT_ESTUDIANTESAND P_RUT_FUNC=RUT_FUNCIONARIOSAND P. COD_LIBRO=CODIGO_LIBRO;COMMIY;END LIBRO_ENTREGA;

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 DOCE(DIAS IN NUMBER,MULTA IN NUMBER, OUT NUMBER, EUROS OUT NUMBER, DOLARES OUT NUMBER) ISBEGINSELECT SUM(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) * MULTA, ROUND(SUM(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) * MULTA / 520),ROUND(SUM(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) * MULTA / 650)INTO PESOS, EUROS, DOLARESFROM PRESTAMO PWHERE (TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) >= DIAS;END DOCE;