Don't like ads? PRO users don't see any ads ;-)
Guest

TIGGER1

By: a guest on May 7th, 2012  |  syntax: SQL  |  size: 3.16 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. --1
  2. CREATE TABLE T_AUXILIAR (NUM_EMPLE SMALLINT);
  3.  
  4. CREATE TRIGGER EJ1 FOR EMPLE
  5. AFTER UPDATE
  6.  
  7. AS
  8. BEGIN
  9. INSERT INTO T_AUXILIAR (NUM_EMPLE) VALUES (NEW.EMP_NO);
  10. END
  11.  
  12.  
  13. --2
  14. CREATE TABLE AUDITAREMPLE (FECHA DATE, HORA TIME, NUM_EMPLE SMALLINT, SALARIO_ANT INTEGER, SALARIO_POS INTEGER);
  15.  
  16. CREATE TRIGGER EJ2 FOR EMPLE
  17. AFTER UPDATE
  18. AS
  19. DECLARE SAL NUMERIC(6,2);
  20. BEGIN
  21. SAL = OLD.SALARIO * 1.05;
  22.  
  23. IF (NEW.SALARIO > SAL) THEN
  24.         INSERT INTO AUDITAREMPLE (FECHA, HORA, NUM_EMPLE, SALARIO_ANT, SALARIO_POS) VALUES (CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, OLD.SALARIO, NEW.SALARIO);
  25. END
  26.  
  27.  
  28. --3
  29. CREATE TABLE AUDITAREMPLE (OPERACION VARCHAR(20), FECHA DATE, HORA TIME, NUM_EMPLE SMALLINT, APELLIDO VARCHAR(10));
  30.  
  31. CREATE TRIGGER EJ3 FOR EMPLE
  32. AFTER INSERT OR DELETE
  33. AS
  34. BEGIN
  35. IF (DELETING) THEN
  36.         INSERT INTO AUDITAREMPLE (OPERACION, FECHA, HORA, NUM_EMPLE, APELLIDO) VALUES ('DELETE', CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, NEW.APELLIDO);
  37. ELSE   
  38.         INSERT INTO AUDITAREMPLE (OPERACION, FECHA, HORA, NUM_EMPLE, APELLIDO) VALUES ('INSERT', CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, NEW.APELLIDO);
  39. END
  40.  
  41. --4
  42. CREATE TABLE CONTROL_CONEXIONES (USUARIO VARCHAR(30), FECHA_HORA DATE);
  43.  
  44. CREATE TRIGGER EJ4 ON CONNECT
  45. AS
  46. BEGIN
  47.         INSERT INTO CONTROL_CONEXIONES (USUARIO, FECHA_HORA) VALUES (CURRENT_USER, CURRENT_TIMESTAMP);
  48. END
  49.  
  50. --5
  51. CREATE EXCEPTION DEPT_NOEXISTENTE 'El departamento no existe';
  52.  
  53. CREATE TRIGGER EJ5 FOR EMPLE
  54. BEFORE INSERT
  55. AS
  56. BEGIN
  57. IF (NEW.DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPART)) THEN
  58.    EXCEPTION DEPT_NOEXISTENTE;
  59. END
  60.  
  61. --6
  62. CREATE EXCEPTION FECHA_NOVALIDA 'La fecha introducida no es valida';
  63.  
  64. CREATE TRIGGER EJ6 FOR EMPLE
  65. BEFORE INSERT OR UPDATE
  66. AS
  67. BEGIN
  68. IF (NEW.FECHA_ALT <= CURRENT_DATE) THEN
  69.         NEW.COMISION = 0;
  70. ELSE
  71.    EXCEPTION FECHA_NOVALIDA;
  72. END
  73.  
  74. --7
  75. CREATE EXCEPTION USUARIO_EXISTENTE 'El usuario ya existe';
  76.  
  77. CREATE TRIGGER EJ7 FOR EMPLE
  78. BEFORE INSERT
  79. AS
  80. BEGIN
  81. IF (NEW.EMP_NO IN (SELECT EMP_NO FROM EMPLE)) THEN
  82.    EXCEPTION USUARIO_EXISTENTE;
  83. END
  84.  
  85. --8
  86. CREATE TABLE CONTROL_CONEXIONES (EVENTO VARCHAR(30), USUARIO VARCHAR(30), FECHA_HORA DATE);
  87.  
  88. CREATE TRIGGER EJ8 ON DISCONNECT
  89. AS
  90. BEGIN
  91.         INSERT INTO CONTROL_CONEXIONES (EVENTO, USUARIO, FECHA_HORA) VALUES ('DISCONNECT', CURRENT_USER, CURRENT_TIMESTAMP);
  92. END
  93.  
  94.  
  95. --9
  96. CREATE EXCEPTION NUM_EMPLE_NOVALIDO 'El numero de empleado no es valido';
  97.  
  98. CREATE TRIGGER EJ9 FOR EMPLE
  99. BEFORE INSERT
  100. AS
  101. BEGIN
  102. IF ((SELECT COUNT(EMP_NO) FROM EMPLE WHERE DEPT_NO = NEW.DEPT_NO) >= 15) THEN
  103.    EXCEPTION NUM_EMPLE_NOVALIDO;
  104. END
  105.  
  106.  
  107. --10
  108. CREATE TABLE AUDITAR_EMPLE (OPERACION VARCHAR(20), USUARIO VARCHAR(30),  FECHA_HORA DATE, NUM_EMPLE SMALLINT);
  109.  
  110. CREATE TRIGGER EJ10 FOR EMPLE
  111. AFTER INSERT OR UPDATE OR DELETE
  112. AS
  113. BEGIN
  114.  
  115. IF (INSERTING) THEN
  116.         INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('INSERT', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
  117. IF (UPDATING) THEN
  118.         INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('UPDATE', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
  119. IF (DELETING) THEN
  120.         INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('DELETE', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
  121. END