Error tabla mutante - Ejercicio
Publicado por RaGK (1 intervención) el 25/02/2020 11:54:06
Buenas,
Nos han planteado un problema con una función y un trigger. Pero al intentar hacer un update de el hire_date para que se actualice el salary en función del hire date me da error en tabla mutante. Dejo el código a ver si algún alma caritativa me puede echar una mano. Gracias!
CREATE OR REPLACE FUNCTION subida_sueldo_corresponde (trabajador IN NUMBER)
RETURN NUMBER IS
v_salario hr.employees.salary%type;
v_porcentaje NUMBER:=0.01;
v_ano NUMBER(2);
v_nuevo_sal NUMBER;
BEGIN
SELECT salary, FLOOR((SYSDATE - hire_date) / 365) INTO v_salario, v_ano FROM hr.employees WHERE employee_id=trabajador;
v_nuevo_sal:= v_salario + ((v_salario*v_ano)*v_porcentaje);
RETURN v_nuevo_sal;
END;
CREATE OR REPLACE TRIGGER subida_sueldo_correspondiente AFTER UPDATE OF hire_date ON hr.employees FOR EACH ROW
DECLARE
nuevo_sueldo NUMBER;
BEGIN
SELECT subida_sueldo_corresponde(:old.employee_id) INTO nuevo_sueldo from dual;
UPDATE hr.employees SET salary=nuevo_sueldo WHERE employee_id=:old.employee_id;
END;
Nos han planteado un problema con una función y un trigger. Pero al intentar hacer un update de el hire_date para que se actualice el salary en función del hire date me da error en tabla mutante. Dejo el código a ver si algún alma caritativa me puede echar una mano. Gracias!
CREATE OR REPLACE FUNCTION subida_sueldo_corresponde (trabajador IN NUMBER)
RETURN NUMBER IS
v_salario hr.employees.salary%type;
v_porcentaje NUMBER:=0.01;
v_ano NUMBER(2);
v_nuevo_sal NUMBER;
BEGIN
SELECT salary, FLOOR((SYSDATE - hire_date) / 365) INTO v_salario, v_ano FROM hr.employees WHERE employee_id=trabajador;
v_nuevo_sal:= v_salario + ((v_salario*v_ano)*v_porcentaje);
RETURN v_nuevo_sal;
END;
CREATE OR REPLACE TRIGGER subida_sueldo_correspondiente AFTER UPDATE OF hire_date ON hr.employees FOR EACH ROW
DECLARE
nuevo_sueldo NUMBER;
BEGIN
SELECT subida_sueldo_corresponde(:old.employee_id) INTO nuevo_sueldo from dual;
UPDATE hr.employees SET salary=nuevo_sueldo WHERE employee_id=:old.employee_id;
END;
Valora esta pregunta


0