Advertisement
PJF16

the same?

Jan 18th, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.69 KB | None | 0 0
  1. CREATE OR REPLACE
  2. TRIGGER sal_check_ct
  3. FOR INSERT OR UPDATE OF job, sal ON emp
  4. compound TRIGGER
  5.    
  6.     temp_sal emp.sal%TYPE;
  7.    
  8. BEFORE each ROW IS 
  9. BEGIN
  10.     CASE
  11.     WHEN inserting OR updating
  12.     THEN       
  13.         SELECT MAX(sal) INTO temp_sal FROM emp WHERE job = :NEW.job;
  14.         IF (temp_sal < :NEW.sal) THEN
  15.             raise_application_error (-20002,'error - Gehalt ist zu hoch!');
  16.       END IF;
  17.      
  18.     SELECT MIN(sal) INTO temp_sal FROM emp WHERE job = :NEW.job;
  19.    
  20.     IF (temp_sal > :NEW.sal) THEN
  21.       raise_application_error (-20002, 'error - Gehalt zu niedrig!');
  22.     END IF;
  23.     END CASE;
  24. END BEFORE each ROW;
  25.  
  26. END sal_check_ct;
  27.  
  28.  
  29. -------------------------------------
  30.  
  31. CREATE OR REPLACE TRIGGER sal_check_ct
  32. FOR INSERT OR UPDATE OF job, sal ON emp
  33. compound TRIGGER
  34.  
  35.     TYPE emp_record_type IS record (
  36.         job emp.job%TYPE,
  37.         minsal NUMBER(7,2),
  38.         maxsal NUMBER(7,2));
  39.    
  40.     TYPE tab IS TABLE OF emp_record_type INDEX BY binary_integer;
  41.     t_tab tab;
  42.    
  43.     i NUMBER;  
  44.    
  45. BEFORE statement IS
  46. BEGIN
  47.     i := 0;
  48.    
  49.     FOR rec IN (SELECT job, MIN(sal), MAX(sal) FROM emp GROUP BY job) loop
  50.         t_tab(i) := rec;
  51.         i := i+1;
  52.        
  53.     END loop;
  54. END BEFORE statement;
  55.    
  56. BEFORE each ROW IS 
  57. BEGIN
  58.     CASE
  59.     WHEN inserting OR updating
  60.     THEN       
  61.         i := t_tab.FIRST;
  62.        
  63.         while i IS NOT NULL loop
  64.             exit WHEN :NEW.job = t_tab(i).job;
  65.             i := t_tab.NEXT(i);
  66.         END loop;
  67.        
  68.         IF i IS NULL THEN
  69.             raise_application_error (-20211, 'Beruf nicht vorhanden');
  70.         END IF;    
  71.         IF :NEW.sal < t_tab(i).minsal OR :NEW.sal > t_tab(i).maxsal
  72.         THEN
  73.             raise_application_error (-20212, 'Gehalt muss zwischen Minimum
  74.                                                  und Maximum fΓΌr diesen Beruf sein');
  75.         END IF;
  76.     END CASE;
  77. END BEFORE each ROW;
  78.  
  79. END sal_check_ct;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement