Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE
- TRIGGER sal_check_ct
- FOR INSERT OR UPDATE OF job, sal ON emp
- compound TRIGGER
- temp_sal emp.sal%TYPE;
- BEFORE each ROW IS
- BEGIN
- CASE
- WHEN inserting OR updating
- THEN
- SELECT MAX(sal) INTO temp_sal FROM emp WHERE job = :NEW.job;
- IF (temp_sal < :NEW.sal) THEN
- raise_application_error (-20002,'error - Gehalt ist zu hoch!');
- END IF;
- SELECT MIN(sal) INTO temp_sal FROM emp WHERE job = :NEW.job;
- IF (temp_sal > :NEW.sal) THEN
- raise_application_error (-20002, 'error - Gehalt zu niedrig!');
- END IF;
- END CASE;
- END BEFORE each ROW;
- END sal_check_ct;
- -------------------------------------
- CREATE OR REPLACE TRIGGER sal_check_ct
- FOR INSERT OR UPDATE OF job, sal ON emp
- compound TRIGGER
- TYPE emp_record_type IS record (
- job emp.job%TYPE,
- minsal NUMBER(7,2),
- maxsal NUMBER(7,2));
- TYPE tab IS TABLE OF emp_record_type INDEX BY binary_integer;
- t_tab tab;
- i NUMBER;
- BEFORE statement IS
- BEGIN
- i := 0;
- FOR rec IN (SELECT job, MIN(sal), MAX(sal) FROM emp GROUP BY job) loop
- t_tab(i) := rec;
- i := i+1;
- END loop;
- END BEFORE statement;
- BEFORE each ROW IS
- BEGIN
- CASE
- WHEN inserting OR updating
- THEN
- i := t_tab.FIRST;
- while i IS NOT NULL loop
- exit WHEN :NEW.job = t_tab(i).job;
- i := t_tab.NEXT(i);
- END loop;
- IF i IS NULL THEN
- raise_application_error (-20211, 'Beruf nicht vorhanden');
- END IF;
- IF :NEW.sal < t_tab(i).minsal OR :NEW.sal > t_tab(i).maxsal
- THEN
- raise_application_error (-20212, 'Gehalt muss zwischen Minimum
- und Maximum fΓΌr diesen Beruf sein');
- END IF;
- END CASE;
- END BEFORE each ROW;
- END sal_check_ct;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement