Txerrinko

Ejercicios Refuerzo PL/SQL

Jun 3rd, 2012
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.81 KB | None | 0 0
  1. --Realizar un programa que modifique el tipo de un cliente, cuyo DNI se lee por teclado, asignándole 'EE'. Se debe controlar mediante una excepción el caso --de que el cliente no exista.
  2.  
  3. SET SERVEROUTPUT ON
  4.       ACCEPT DNI PROMPT 'INTRODUCE DNI DEL CLIENTE';
  5.  
  6. DECLARE
  7.    X NUMBER(10);
  8.    MI_ERROR EXCEPTION;
  9.  
  10. BEGIN    
  11.          SELECT COUNT (*) INTO X FROM TCLIENTE WHERE DNI='&DNI';
  12.      IF X=0 THEN
  13.           RAISE MI_ERROR;
  14.     END IF;
  15.  
  16.      UPDATE TCLIENTE SET TIPO='EE' WHERE DNI='&DNI';
  17.  
  18.  
  19.     EXCEPTION
  20.                WHEN MI_ERROR EXCEPTION
  21.          DBMS_OUTPUT.PUT_LINE('EL CLIENTE NO EXISTE');
  22. END;
  23. /
  24.  
  25.  
  26. --Realizar un programa que, utilizando un cursor, recorra todos los empleados generando una excepción en el instante en el que se encuentre uno que es jefe --de sí mismo. En ese momento el programa debe parar.
  27.  
  28. SET SERVEROUPUT ON;
  29.    
  30. CURSOR CEMP IS
  31.     SELECT * FROM EMPLEADO
  32.  
  33.  
  34.  X CEMP%ROWTYPE;
  35.   ERROR  EXCEPTION;
  36.  
  37.   BEGIN  
  38.    LOOP;
  39.      FETCH CEMP INTO X;
  40.      EXIT WHEN CEMP%NOTFOUND;
  41.  
  42.       IF X.NUM_EMP=X.NUM_SUP THEN
  43.             RAISE ERROR;
  44.      END IF;
  45.         END LOOP;
  46.      CLOSE CEMP;
  47.            EXCEPTION
  48.              WHEN ERROR THEN
  49.          DBMS_OUTPUT.PUT_LINE('ESE EMPLEADO ES JEFE DE SI MISMO');
  50.  
  51.      
  52.    
  53. --Modificar el programa anterior haciendo que se genere una excepción cada vez que se encuentre a alguien que es jefe de sí mismo, es decir, que no se pare --cuando se genera la primera excepción.
  54.  
  55.  
  56. SET SERVEROUPUT ON;
  57.    
  58. CURSOR CEMP IS
  59.     SELECT * FROM EMPLEADO
  60.  
  61.  
  62.  X CEMP%ROWTYPE;
  63.   ERROR  EXCEPTION;
  64.  
  65.   BEGIN  
  66.    LOOP;
  67.      FETCH CEMP INTO X;
  68.      EXIT WHEN CEMP%NOTFOUND;
  69.     BEGIN
  70.       IF X.NUM_EMP=X.NUM_SUP THEN
  71.             RAISE ERROR;
  72.      END IF;
  73.           EXCEPTION
  74.               WHEN_ERROR THEN
  75.                    DBMS_OUTPUT.PUT_LINE('ESE EMPLEADO ES JEFE DE SI MISMO');
  76.  
  77.         END LOOP;
  78.      CLOSE CEMP;
  79.       END;
  80. /
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100. --Escribir un disparador de base de datos que haga fallar cualquier operación de modificación del apellido o del número de un empleado, o que suponga una ---subida de sueldo superior al 10%.
  101.  
  102. CREATE OR REPLACE TRIGGER NUMEMP  
  103.    BEFORE  UPDATE OF NOMBRE,SALARIO , NUM_EMP ON EMPLEADO FOR EACH ROW
  104.    ERROR EXCEPTION;
  105.  DECLARE
  106.         IF :NEW.SALARIO> :OLD.SALARIO*1,10 OR :NEW.NUM_EMP!= :OLD.NUM_EMP OR :NEW.NOMBRE != :OLD.NOMBRE THEN
  107.             RAISE ERROR;
  108.         END IF;
  109.    EXCEPTION
  110.              WHEN ERROR THEN
  111.        DMBS_OUTPUT.PUT_LINE(EL SALARIO DEL EMPLEADO NO PUEDE SER MAYOR QUE EL 10% O EL NUMERO O NOMBRE DE EMPLEADOS NO PUEDEN SER MODIFICADOS);
  112.    END;
  113. /
  114.  
  115.  
  116.  
  117.    
  118.    
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134. --Escribir un trigger de base de datos que impida borrar una provincia de la tabla TPROVINCIA si hay clientes en ella.
  135.  
  136.   CREATE OR REPLACE TRIGGER BORRARPROV
  137.        BEFORE DELETE ON TPROVINCIA FOR EACH ROW
  138.  DECLARE
  139.         X NUMBER(5);
  140.      ERROR_SUP EXCEPTION;
  141.   --LANZAR ERROR_SUP
  142.     SELECT COUNT(DNI)  INTO X FROM TCLIENTE
  143.          WHERE PROVINCIA= :OLD.CODIGO;  
  144.       IF X !=0 THEN
  145.            RAISE ERROR_SUP;
  146.  
  147.       END IF;
  148.   EXCEPTION
  149.             WHEN ERROR_SUP THEN
  150.      DMBS_OUTPUT.PUT_LINE(' NO SE IMPIDE BORRAR LA TABLA');
  151.   END;
  152. /
  153. --Asociar a la tabla de “capturas_en_solitario” un disparador de base de datos que impida insertar una tupla cuando los dos avalistas sean el mismo.
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. --Construir un trigger de base de datos que informe de que se ha insertado en la tabla de capturas una tupla con una trucha de cero centímetros de longitud --o cero gramos de peso.
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. --Escribir un trigger de base de datos asociado a la tabla de capturas en evento que lance un mensaje por pantalla cuando el evento corresponda a un lugar --de la comunidad del País Vasco.
Advertisement
Add Comment
Please, Sign In to add comment