Disparador Oracle antes de la actualización e inserción utilizando :new y :old
Estoy practicando lo que aprendí en PL/SQL. Tengo una tabla “Client” que contiene:
Client (id, nombre, apellido, correo electrónico, ciudad, teléfono, comisión, salario)
La comisión siempre debe ser inferior al salario.
Me pidieron crear un disparador en Oracle antes de insertar y actualizar para asegurarme de que la comisión sea inferior al salario. Así es como lo hice:
Crear Trigger verifySalary
Before insert, update
ON Client
for each row
begin
if :new.salary < :new.comm then
raise_application_error(-20555, 'la comisión debe ser inferior al salario');
end if;
end;
No estoy seguro de que esto sea correcto, porque si el usuario no actualiza el salario y la comisión, o solo actualiza una de estas dos columnas, ¿cuál será el valor de :new.salary y :new.commission?
¿Cómo debo proceder?
Gracias de antemano.
davy.ai
Estimado usuario,
Su implementación del desencadenador es correcta, pero ha planteado una preocupación válida sobre los valores de :new.salary y :new.commission cuando solo uno de ellos se actualiza.
Para manejar este escenario, puede agregar una verificación en el desencadenador para verificar únicamente la comisión si se está actualizando. Puede modificar su desencadenador de la siguiente manera:
Al verificar si :new.comm no es nulo y :new.salary no es nulo, asegura que ambas columnas tengan valores antes de compararlos. Además, al verificar :new.comm >= :new.salary, se asegura de que solo se genere un error si las comisiones superan los salarios.
¡Espero que esto ayude! Hágamelo saber si tiene alguna pregunta adicional.
Saludos cordiales,
[Su nombre]