lopezdecoca molina angelluis bd06 tarea corregida

Upload: angel

Post on 03-Mar-2016

17 views

Category:

Documents


1 download

DESCRIPTION

TEMA 6

TRANSCRIPT

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 1/9Unidad de Trabajo 6.- Programacin de bases de datos

    Siguiendo con el mismo ejemplo de las tareas 4 y 5 debes de realizar los siguientes apartados:

    Para comenzar crearemos un espacio de trabajo o Workspace llamado Tema6 con un usuariollamado SYSTEM al que pondremos tambin una contrasea (ej: Tema6. Este usuario ser portanto el administrador de este espacio de trabajo y tendr permisos para crear tablas.

    Vamos a utilizar la lnea de comandos de SQL para ejecutar el archivo descargado, para elloseguiremos lospasos que aparecen a continuacin:1. Vamos a Inicio > Todos los programas > Oracle Database 11g 1. Express Edition.2. Pulsamos en Run SQL Command Line. Aparecer la siguiente pantalla:3. Ejecutamos la instruccin: connect Tema6/Tema6Cuando ejecutamos el comando debe decirnos que ya est conectado:4. Ahora ya podemos ejecutar el archivo del siguiente modo:@C:\scriptTarea6.sqlEn nuestro caso, el archivo est guardado directamente en la unidad C para que nos resultems fcil localizarlo:

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 2/9Unidad de Trabajo 6.- Programacin de bases de datos

    5. Si todo es correcto, deberan crearse las tablas e insertarse los datos que contiene el archivo:6. Despus nos desconectamos "desconnect" y seguidamente nos salimos de la consola "exit".

    7. Podemos comprobar como se se han introducido nuestras tablas con sus correspondientesdatos.

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 3/9Unidad de Trabajo 6.- Programacin de bases de datos

    a) Crear un procedimiento que reciba como parmetro el tema de una conferencia y muestre por pantalla el nombre de los asistentes a dicha conferencia.

    CREATE OR REPLACE PROCEDURE Tema_Conferencia( v_Tema VARCHAR2)IS --Creamos o reemplazamos un procedimiento y creamos una variableCURSOR Cursor IS SELECT NOMBRE --Seleccionamos la variable NOMBREFROM CONFERENCIA C, ASISTIR AT, ASISTENTE A --De las tablas Conferencia, Asistir y AsistenteWHERE C.REFERENCIA = AT.REFCONFERENCIA --Cuando referencia sea igual a refconferencia y codigo sea igual a codasistenteAND A.CODIGO = AT.CODASISTENTE AND C.Tema=v_Tema;v_Nombre VARCHAR(100); BEGIN OPEN Cursor; LOOP --Empezamos el ciclo instrucciones FETCH Cursor INTO v_Nombre; --Variable donde guardamos los datos del ciclo EXIT WHEN Cursor%NOTFOUND; --Condicion para salir dbms_output.put_line(v_Nombre); END LOOP; --Cerramos ciclo CLOSE Cursor; --Cerramos la variable del CursorEND Tema_Conferencia ;

    Para comprobarlo ejecutamos con. BEGIN Tema_Conferencia('Programacin Web'); END

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 4/9Unidad de Trabajo 6.- Programacin de bases de datos

    b) Crear un procedimiento que reciba como parmetro el nombre de una sala. El procedimiento debe incrementar el precio de las conferencias que se impartan en esa sala en un 10% si la capacidad de la sala es menor de 180 personas y en un 5% si la capacidad es mayor. El procedimiento debe mostrar por pantalla el nombre de las conferencias con su precio actualizado. CREATE OR REPLACE PROCEDURE Incrementar_PrecioSala( v_NOMBRE VARCHAR2)IS --Creamos o reemplazamos un procedimiento creamos una variableCURSOR Cursor ISSELECT capacidad FROM SALA WHERE NOMBRE = v_NOMBRE; CapacidadSala Number(5,2);BEGIN OPEN Cursor;LOOP FETCH Cursor INTO CapacidadSala; EXIT WHEN Cursor%NOTFOUND; IF (CapacidadSala 180) THEN UPDATE Conferencia SET precio=(precio * 1.05) WHERE sala = v_NOMBRE; END IF; --Finalizamos el IFEND LOOP;CLOSE Cursor;END Incrementar_PrecioSala; --Finalizamos el procedimiento

    IESResaltado

    IESTexto escrito a mquinaTe ha faltado mostrar por pantalla el nombre de las conferencias con su precio actualizado tal y como se pide en el enunciado. Lo puedes hacer al final cuando ya has hecho la actualizacin.

    IESLnea

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 5/9Unidad de Trabajo 6.- Programacin de bases de datos

    --Para comprobarlo primero vemos el precio de la sala Afrodita.

    --Para comprobarlo ejecutamos con.

    BEGIN Incrementar_PrecioSala('Afrodita'); END

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 6/9Unidad de Trabajo 6.- Programacin de bases de datos

    c) Crea una funcin que reciba como parmetro el nombe de una empresa y devuelva el nombre del asistente ms joven que trabaje en esa empresa.

    CREATE OR REPLACE FUNCTION Nombre_Empresa( v_EMPRESA VARCHAR2)RETURN VARCHAR2 IS

    nombreSalida VARCHAR2(20);

    BEGIN --Aadimos las sentencias ejecutables

    SELECT nombre INTO nombreSalida FROM Asistente WHERE fechanac IN ( SELECT MIN(fechanac) FROM Asistente WHERE empresa=v_EMPRESA);

    RETURN nombreSalida ;

    END Nombre_Empresa; --Finalizamos la funcin Nombre_Empresa

    --Se visualiza con:BEGIN dbms_output.put_line(Nombre_Empresa('BK Programacin')); END

    IESComentario en el textoDebes utilizar MAX para recuperar la fecha de nacimiento del asistente ms joven. Si utilizas MIN ests recuperando al asistente de ms edad.

    IESResaltado

    IESLnea

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 7/9Unidad de Trabajo 6.- Programacin de bases de datos

    d) Crear un disparador (trigger) que almacene en una tabla, llamada auditoria (que debers crear previamente) los siguientes campos: usuario (con el que estamos autenticados en Oracle), cdigo de ponente, cdigo de conferencia, fecha, gratificacin anterior y gratificacin posterior. Ese disparador se disparar cuando se detecte una modificacin en el campo gratificacin, de la tabla Participar.Para cada uno de los apartados debers realizar el cdigo en PL-SQL debidamente documentado que resuelve el apartado y debers comprobar su funcionamiento mostrando una captura de pantalla que muestre la ejecucin de cada apartado.

    En el caso del apartado d) para comprobar el funcionamiento del trigger debers realizar varias actualizaciones sobre el campo gratificacion de la tabla participar y posteriormente consultar la tabla auditoria para ver que se han almacenado los datos correctamente.

    --Creamos la tabla Auditoria con los siguientes campos:

    CREATE TABLE "Auditoria"( "USUARIO" VARCHAR2(100) NOT NULL ENABLE,"CODPONENTE" CHAR(6) NOT NULL ENABLE,"REFCONFERENCIA" CHAR(7) NOT NULL ENABLE,"FECHA" DATE NOT NULL ENABLE,"GRATIF_ANTERIOR" NUMBER (6,2) NOT NULL ENABLE,"GRATIF_POSTERIOR" NUMBER (6,2) NOT NULL ENABLE)/

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 8/9Unidad de Trabajo 6.- Programacin de bases de datos

    --Creamos o reemplazamos un Trigger Participar_T1CREATE OR REPLACE TRIGGER "PARTICIPAR_T1" BEFORE UPDATE OF gratificacion ON Participar /*Actuara cada vez que se modifique la gratificacion de la tabla Participar */FOR EACH ROWDECLARE FECHA DATE := sysdate; --Declaramos la variable FECHABEGIN --Insertamos los valores nuevos y antiguos en la tabla auditoria INSERT INTO "Auditoria"(USUARIO, CODPONENTE, REFCONFERENCIA , FECHA, GRATIF_ANTERIOR , GRATIF_POSTERIOR) VALUES(USER,:old.CODPONENTE, :old.REFCONFERENCIA, FECHA ,:old.GRATIFICACION ,:new.GRATIFICACION );END;/

    /*Para comprobar el trigger Participar_T1*/BEGIN

    UPDATE participar SET GRATIFICACION=500 WHERE CODPONENTE='ESP002';

    END

  • Lpez de Coca_Molina_ngel Luis_BD06_Tarea Pg. 9/9Unidad de Trabajo 6.- Programacin de bases de datos

    --Para ver los datos guardados en la tabla Auditoria realizaremos:

    SELECT * FROM "Auditoria"