Estou no meio do meu aprendizado sobre PL/SQL, e tenho curtido bastante o que tenho visto.
Neste momento pretendo criar uma trigger que após a inserção de um novo empregado, compare o seu salário com o de seu gerente e, caso seja maior, atualize-o igualando ao do gerente.
Mas tenho obtido o seguinte erro:
Segue o código da trigger...UNESA@XE > insert into emp(empno, ename,mgr) values(7788, 'TESTE2', 7902);
insert into emp(empno, ename,mgr) values(7788, 'TESTE2', 7902)
*
ERROR at line 1:
ORA-04091: table UNESA.EMP is mutating, trigger/function may not see it
ORA-06512: at "UNESA.COMPSAL", line 6
ORA-04088: error during execution of trigger 'UNESA.COMPSAL'
CREATE OR REPLACE TRIGGER compsal
AFTER INSERT
ON emp
FOR EACH ROW
DECLARE
v_salemp NUMBER(7,2);
v_salmgr NUMBER(7,2);
BEGIN
SELECT e.sal INTO v_salemp
FROM emp e JOIN emp g ON e.mgr = g.empno
WHERE :NEW.empno = e.empno;
SELECT g.sal INTO v_salmgr
FROM emp e JOIN emp g ON e.mgr = g.empno
WHERE :NEW.mgr = e.mgr;
IF v_salemp > v_salmgr THEN
UPDATE emp
SET sal = v_salmgr
WHERE empno = :NEW.empno;
END IF;
END;
/