Txerrinko

Examen 3ºEvaluacion PL/SQL

Jun 3rd, 2012
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.57 KB | None | 0 0
  1. DESC TCLIENTE   DESC EMPLEADO DESC TVENDEDOR   DESC TPROVINCIA    DESC DEPARTAMENTO
  2.   DNI       NUM_EMP       COD_VEN          CODIGO             NUM_DEPTO
  3.   NOMBRE        NOMBRE        NOM_VEN          NOMBRE             NOMBRE
  4.   PROVINCIA     PUESTO        PORCEN           TOTAL_COMPRA       LOCALIDAD
  5.   TIPO          NUM_SUP       TITULACION
  6.   FECHA_ALTA    FECHA_ALTA    SUPERIOR
  7.  VENDEDOR        SALARIO
  8.  COMPRAS        COMISION
  9.                 NUM_DEP
  10.  
  11.  
  12.  
  13.  
  14. --1ºEjercicio Crear Una Vista con los cliente de la tabla TCLIENTE  cuya provincia esta en la tabla TPROVINCIA
  15.  
  16.     CREATE VIEW AS
  17.         SELECT *
  18.         FROM TPROVINCIA IN
  19.             (SELECT *
  20.              FROM TPROVINCIA
  21.                WHERE PROVINCIA=CODIGO)
  22.  
  23. --2ºEjercicio Crea una secuencia llamada SEC con el valor 2000
  24.  
  25. CREATE SECUENCE SEC START WITH 2000
  26.  
  27. --3ºEjercicio Insertar una tupla en la tabla EMPLEADO  con el valor de la secuencia SEC como numero de superior ,como nombre PEPE GARCIA  , con la fecha actual del sistema y numero de departamento 7 , no rellenando el resto de campos
  28.  
  29.    INSERT INTO EMPLEADO --SERA NECESARIO INDICAR EN QUE VALORES DE LA COLUMNA INTRODUCIMOS LOS CAMPOS  EN ESTE CASO , AL ESTAR DENTRO DE UNA VISTA
  30.                (NUM_EMP,NOMBRE,NUM_SUP,FECHA_ALTA,NUM_DEP)
  31.   VALUES (SEC NEXTVAL,'PEPE GARCIA',SEC_CURVAL,SYSDATE,7);
  32.  
  33. --4ºEjercicio Crea una restriccion para el campo superior de la tabla TVENDEDOR  que se encuentra en una clave ajena que apunta al campo COD_VEN de la --misma tabla
  34.    ALTER TABLE TVENDEDOR  
  35.           ADD CONSTRAINT CA_TVENDEDOR FOREIGN KEY(SUPERIOR)
  36.               REFERENCES TVENDEDOR (COD_VEN)
  37.  
  38. --5ºEjercicio Borra la restriccion anterior
  39.  
  40. ALTER TABLE TVENDEDOR
  41.       DROP CONSTRAINT CA_TVENDEDOR;
  42.  
  43.  
  44. --6ºEjercicio  Programa que utilizando cursor y la funcion CONTARBLANCOS  escriba en pantalla los nombres de los empleados junto los nombres de las --localidades donde trabajan solo si su superior es el 1003. Cada nombre con su localidad debera escribirse tantas veces como blancos tenga el nombre
  45.  
  46. SET SERVEROUTPUT ON;
  47.       CURSOR CEMP IS
  48.                  SELECT EMPLEADO.NOMBRE , NOMBRE ,LOCALIDAD
  49.                    FROM EMPLEADO,DEPARTAMENTO
  50.                    WHERE NUM_DEP=NUM_DEPTO
  51.                   AND NUM_SUP='1003');
  52.  
  53.      X CEMP%ROWTYPE;
  54.  
  55. BEGIN  
  56.    OPEN CEMP;
  57.          LOOP
  58.         FETCH X INTRO CEMP;
  59.         EXIT WHEN CEMP%NOTFOUND;
  60.    
  61.           FOR I IN 1 .. CONTARBLANCOS(X.NOMBRE) LOOP
  62.              
  63.          DBMS_OUTPUT.PUT_LINE(X.NOMBRE)    LOOP
  64.          END LOOP;
  65.      END LOOP;
  66.   CLOSE CEMP;
  67.  END;
  68. /
  69.          
  70.  
  71. --7ºEjercicio El programa hace una llamada asl procedimiento 'CAMBIAR' .Modificar el procedimiento haciendo que se controle la excepcion cuando la --sentencia SELECT que incluye no devuelve ninguna tupla
  72.  
  73. CREATE OR REPLACE PROCEDURE CAMBIAR                        IS
  74.  
  75.  
  76.  
  77.  
  78.  
  79.       EXCEPTION
  80.               WHEN NO_DATA_FOUND THEN  --CUANDO NO ENCUENTRE DATOS  MOSTRAR MENSAJE
  81.                   DBMS_OUTPUT.PUT_LINE('NO SE HAN ENCONTRADO TUPLAS');
  82.               WHEN OTHERS THEN --SI SUCEDE OTRA EXCEPCION
  83.                  DBMS_OUTPUT.PUT_LINE('ERROR'||SQLCODE||', ,'||SUBSTR(SQLERRM,1,50);
  84.  
  85.    
  86.          
  87. --8ºEjercicio  Realiza un procedimiento almacenado que reciba como parametro un puesto (POR EJEMPLO,ANALISTA)  y sunba un 5% el sueldo de las dos personas que ocupan ese puesto y cobran menos .
  88.  
  89. --A)Al resto de personas que tienen ese puesto se les subira un 3%.
  90.  
  91. --B)Si no hay ninguna persona que tiene ese puesto , se considerará que es una excepcion y se tendra que mostrar en pantalla un mensaje como 'NO HAY NADIE EN ESE PUESTO'.
  92.  
  93. CREATE OR REPLACE PROCEDURE  SUBIRSUELDO (PUES EMPLEADO.TCLIENTE%TYPE) IS
  94.     CURSOR CEMP IS
  95.          SELECT * FROM EMPLEADO  
  96.                 WHERE PUESTO=PUES
  97.            ORDER BY SALARIO;
  98.    X  CEMP%ROWTYPE;
  99.  
  100.    BEGIN
  101.        OPEN CEMP;
  102.     LOOP;  
  103.            FETCH  CEMP INTO X;
  104.            EXIT WHEN CEMP%NOTFOUND;
  105.       --SI LA CANTIDAD DE FILAS DE CEMP ES MENOR O IGUAL QUE 2
  106.           IF CEMP%ROWCOUNT <=2 THEN
  107.            
  108.            UPDATE EMPLEADO SET SALARIO=SALARIO*1,0
  109.            WHERE X.NUM_EMP=NUM_EMP;
  110.        END IF;
  111.      --SI SOLO QUEREMOS PILLAR LAS DOS PRIMERAS QUITAMOS EL ELSE
  112.     EXIT WHEN CEMP%NOTFOUND OR CEMP%ROWCOUNT>2;
  113.          UPDATE EMPLEADO SET SALARIO=SALARIO *1,05
  114.          WHERE X.NUM_EMP=NUM_EMP;
  115.  
  116. --9ºEjercicio Crear un TRIGGER que impida la insercion o modificacion de una tupla en la tabla TCLIENTE cuando el codigo de vendedor no sea uno de los existentes en la tabla TVENDEDOR  o la provincia no sea una de las de la tabla PROVINCIA
  117.  
  118. --En el caso de que alguno de esos campos tenga valor NULL  se llevara a cabo la sentencia (no se impedira) pero se informara sobre ello
  119.  
  120. INSERT INTO TCLIENTE ('5555','PEPE','BU','13/10/2005','002',10000)
  121. -----------------------------------------------------------------------
  122. CREATE OR REPLACE TRIGGER AS
  123.      BEFORE INSERT OR UPDATE ON TCLIENTE FOR EACH ROW
  124.       Y TPROVINCIA.CODIGO%TYPE;    
  125.       X TVENDEDOR.COD_VEN%TYPE;
  126. BEGIN  
  127.        --SI ESTAN VACIOS LOS CAMPOS
  128.        IF :NEW.PROVINCIA IS NULL
  129.         OR :NEW.VENDEDOR IS NULL    THEN
  130.              DBMS_OUTPUT.PUT_LINE ('LA PROVINCIA O EL VENDEDOR SON NULOS');
  131.    
  132.        ELSE
  133.            SELECT CODIGO INTO Y FROM TPROVINCIA
  134.             WHERE CODIGO:=NEW.PROVINCIA;
  135.        
  136.            SELECT COD_VEN INTO X FROM TVENDEDOR
  137.             WHERE COD_VEN:=NEW.VENDEDOR;
  138.  
  139.      END IF;
  140.            WHEN NO_DATA_FOUND THEN
  141.       RAISE_APPLICATTION_ERROR (10001,'NO SE PUEDEN INSERTAR TUPLAS EN TCLIENTE');
Advertisement
Add Comment
Please, Sign In to add comment