Problema con los trigger
Publicado por Antonio (1 intervención) el 15/03/2019 16:44:30
Buenas tengo la la siguiente función en la cual saco un aumento del 1% en el salario para cada empleado según su antigüedad (año completo trabajado):
Esta función la tengo que invocar en un trigger el cual cuando se haga una modificación en el campo hire_date tiene que modificar el campo salario y insertar el nuevo salario es decir el salario antiguo más el aumento el trigger es el siguiente:
El trigger me lo compila de forma adecuada pero cuando modifico el campo hire_date de tabla employees me da un error de tabla mutante ¿Esto a que se debe? ¿Que soluciones existen?.
Un saludo y gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
create or replace FUNCTION FUNCTION2
(
ID_EMPLEADO IN NUMBER
) RETURN NUMBER AS
v_salario employees.employee_id%TYPE := 0;
v_año_inicio number;
v_año_actual number;
v_antiguedad number;
v_aumento number;
v_total number;
BEGIN
SELECT salary into v_salario from employees where employee_id = id_empleado;
SELECT to_char(hire_date,'yyyy') into v_año_inicio from employees where employee_id = id_empleado;
SELECT to_char(sysdate,'yyyy') into v_año_actual from dual;
v_antiguedad := v_año_actual - v_año_inicio;
v_aumento := ((v_salario * 1) /100);
v_total := v_antiguedad * v_aumento;
RETURN v_total;
END FUNCTION2;
Esta función la tengo que invocar en un trigger el cual cuando se haga una modificación en el campo hire_date tiene que modificar el campo salario y insertar el nuevo salario es decir el salario antiguo más el aumento el trigger es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace TRIGGER PRUEBA
BEFORE UPDATE OF hire_date ON employees FOR EACH ROW
DECLARE
v_nuevo number;
BEGIN
v_nuevo := function2(:OLD.employee_id);
:NEW.salary:= :OLD.salary + v_nuevo;
END PRUEBA;
El trigger me lo compila de forma adecuada pero cuando modifico el campo hire_date de tabla employees me da un error de tabla mutante ¿Esto a que se debe? ¿Que soluciones existen?.
Un saludo y gracias.
Valora esta pregunta
0