You are on page 1of 5

LABORATORIO 04-06 Procedimientos y Funciones

Alumno: Cristian Rubio B. Fecha : 15-06-2012

1. Se solicita obtener mediante una funcin el resultado de la multiplicacin de 8 por 9.


CREATE OR REPLACE FUNCTION MULT9POR8 RETURN NUMBER IS RESULTADO NUMBER; BEGIN RESULTADO := 8 * 9; RETURN RESULTADO; END MULT9POR8;

2. Se solicita obtener mediante una funcin el resultado de la divisin de 4 por 55.


CREATE OR REPLACE FUNCTION DIV4POR55 RETURN NUMBER IS RESULTADO NUMBER; BEGIN RESULTADO := 4 / 55; RETURN RESULTADO; END DIV4POR55;

3. Investigar el uso de parmetros en una funcin, y desarrolle una funcin para cada uno de los siguientes ejercicios: a) a) F(X,Y) = X+Y
CREATE OR REPLACE FUNCTION fDeXeY(X NUMBER, Y NUMBER) RETURN NUMBER IS RESULTADO NUMBER; BEGIN RESULTADO := X + Y; RETURN RESULTADO; END fDeXeY;

b) F(X,Y,Z) = (X+Y)*Z
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) F(W,X,Y,Z) = W(X-1)(Y-Z)(Z+2)
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;

4. Investigue el uso de la sentencia INTO. INSERT INTO nos permite insertar filas mltiples en una tabla. Se utiliza la instruccin SELECT para especificar los datos que deseamos insertar en la tabla. Si est pensando si esto significa que est utilizando informacin de otra tabla, est en lo correcto. La forma es la siguiente: INSERT INTO "tabla1" ("columna1", "columna2", ...) SELECT "columna3", "columna4", ... FROM "tabla2" Esta es la forma ms simple. La instruccin entera puede tener fcilmente clusulas WHERE, GROUP BY, y HAVING, as como tambin uniones y alias. Entonces por ejemplo, si deseamos tener una tabla Store_Information, que recolecte la informacin de ventas para el ao 1999, y ya conoce que para la fuente de datos en tabala Sales_Information table, ingresamos: INSERT INTO Store_Information (store_name, Sales, Date) SELECT store_name, Sales, Date FROM Sales_Information WHERE Year(Date) = 1999 Aqu hemos utilizado la sintaxis de Servidor SQL para extraer la informacin anual por medio de una fecha. Otras bases de datos relacionales pueden tener sintaxis diferentes. Por ejemplo, en Oracle, utilizar to_char (date,'yyyy')=1999.

5. Se define que la morosidad excesiva es referida a cuando un estudiante no ha hecho entrega de un prstamo por un tiempo igual o superior a 20 das. Realice una funcin que entregue el N de prstamos con Morosidad Excesiva.
CREATE OR REPLACE FUNCTION MOROCIDAD RETURN NUMBER IS MOROSOS NUMBER; BEGIN SELECT COUNT(*) INTO MOROSOS FROM PRESTAMO P WHERE 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 das pueda ser variable, esto es pasndolo como parmetro a la funcin.
CREATE OR REPLACE FUNCTION MOROSIDAD2(X IN NUMBER) RETURN NUMBER IS MOROSOS NUMBER; BEGIN SELECT COUNT(*) INTO MOROSOS FROM PRESTAMO P WHERE TRUNC(SYSDATE) - P.FECHA_E >= X; RETURN MOROSOS; END MOROSIDAD2;

7. Se solicita pasar por parmetro a la funcin el nmero de das a evaluar y el valor por da 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 IS RESULT NUMBER; BEGIN SELECT SUM(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) * VALOR_DIARIO AS DEUDA_TOTAL INTO RESULT FROM PRESTAMO P WHERE(TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) >= DIAS_ATRASO; RETURN RESULT; END CALCULO_DEUDA;

8. Investigue cual es la diferencia entre FUNCTION y PROCEDURE en PLSQL. La diferencia ms importante entre los procedimientos y las funciones es que cuando una funcin, finaliza su ejecucin, devuelve un valor al bloque PL/SQL que la llam. Sin embargo, en los procedimientos esto no es posible, lo que s se puede es definir mltiples parmetros de salida que se devolveran al bloque PL/SQL desde el que se ejecut el procedimiento (esto ltimo tambin es posible en las funciones).

9. Lea los artculos de INSERT, UPDATE y DELETE que se encuentran en Definiciones al final de este documento.

10. Realice un procedimiento (PROCEDURE) que reciba como parmetro el Rut del Estudiante, el Cdigo del Libro y el Rut del Funcionario. Este procedimiento debe ingresar un prstamo, considerando que todos los libros se prestan por 3 das. (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 ENTREGA_LIBRO(RUT_ESTUDIANTE IN NUMBER, RUT_FUNCIONARIO IN NUMBER, CODIGO_LIBRO IN NUMBER) IS BEGIN DELETE FROM PRESTAMO P WHERE P.RUT_EST=RUT_ESTUDIANTE AND P.RUT_FUNC=RUT_FUNCIONARIO AND P.COD_LIBRO=CODIGO_LIBRO; COMMIT; END ENTREGA_LIBRO;

12. Realizar un procedimiento que realice lo mismo que el ejercicio 7, pero que se le entreguen 2 parmetros (das a evaluar y valor por da de atraso en pesos chilenos) y muestre 3 parmetros de salida (deuda total del alumnado en pesos chilenos, en euros y en dlares).
CREATE OR REPLACE PROCEDURE DOCE(DIAS IN NUMBER, MULTA IN NUMBER, PESOS OUT NUMBER, EUROS OUT NUMBER, DOLARES OUT NUMBER) IS BEGIN SELECT 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, DOLARES FROM PRESTAMO P WHERE (TRUNC(SYSDATE) - TRUNC(P.FECHA_E)) >= DIAS; END DOCE;

You might also like