Fundamentals PL/SQL: Chapter 17 More Trigger Concepts

5 comentarios para “Fundamentals PL/SQL: Chapter 17 More Trigger Concepts”

  1. Lorena León Dice:

    CREANDO MI PRIMER TRIGGER
    En este ejemplo, si insertamos o actualizamos el registro de un empleado de manera que el salario sea superior a 5000 , el trigger PL/SQL actualizará dicho salario al valor de 5000 independientemente del salario que nosotros hayamos insertado o introducido al modificar el registro.

    CREATE TRIGGER tr1_employees
    BEFORE INSERT OR UPDATE OF salary
    ON employees
    FOR EACH ROW
    WHEN (new.salary > 5000)
    BEGIN
    UPDATE employees
    SET salary = 5000
    WHERE employee_id = :new.employee_id
    END;

  2. Diego Guamán Dice:

    USANDO LAS FACILIDADES DEL SERVIDOR ORACLE PARA AUDITORIAS DE OPERACIONES DE DATOS

    El siguiente codigo muestra que estoy auditando las operaciones de insertado, actualizado y borrado de la tabla employees.

    AUDIT INSERT, UPDATE, DELETE
    ON employees
    BY ACCESS
    WHENEVER SUCCESSFUL;

  3. Luis Feijoo Dice:

    CREATE OR REPLACE TRIGGER check_salary
    BEFORE INSERT OR UPDATE OF salary, job_id
    ON employees
    FOR EACH ROW
    WHEN (NEW.job_id ‘AD_PRES’)
    DECLARE
    v_minsalary employees.salary%TYPE;
    v_mAXsalary employees.salary%TYPE;
    BEGIN
    SELECT MIN(salary), MAX(salary)
    INTO v_minsalary, v_maxsalary
    FROM employees
    WHERE job_id = :NEW.job_id;
    IF :NEW.salary v_maxsalary THEN
    RAISE_APPLICATION_ERROR(-20505, ‘Out of range’);
    END IF;
    END;

  4. Luis Feijoo Dice:

    En el ejemplo de arriba se muesta la creacion de un trigger, cada vez que un nuevo empleado se agrega a la tabla de empleados o cuando el sueldo de un empleado existente o el ID de trabajo es cambiada, el sueldo del empleado entra dentro del rango de salario establecido para el trabajo del empleado.

    Cuando un registro del empleado es actualizado, el trigger CHECK_SALARY se dispara para cada fila que se actualiza.

  5. claucar Dice:

    A continuación un ejemplo expuesto en el libro de mutación de tablas, en el que cuando el registro de un empleado es actualizado, el trigger CHECK_SALARY se dispara para cada fila que es actualizada. El código del trigger consulta la misma tabla que esta siendo actualizada. Por lo tanto se dice que la tabla EMPLOYEES es mutada.

    CREATE OR REPLACE TRIGGER check_salary
    BEFORE INSERT OR UPDATE OF salary, job_id ON employees
    FOR EACH ROW
    WHEN (NEW.job_id ‘AD_PRES’)
    DECLARE
    v_minsalary employees.salary%TYPE;
    v_maxsalary employees.salary%TYPE;
    BEGIN
    SELECT MIN(salary), MAX(salary)
    INTO v_minsalary, v_maxsalary
    FROM employees
    WHERE job_id = :NEW.job_id;
    IF :NEW.salary v_maxsalary THEN
    RAISE_APPLICATION_ERROR(-20505, ‘Fuera de rango’);
    END IF;
    END;
    /

    UPDATE employees
    SET salary = 25000
    WHERE job_id = ‘AD_VP’;

    SALIDA
    UPDATE employees
    *

    ERROR at line 1:
    ORA-04091: table CCASTANEDA.EMPLOYEES is mutating, trigger/function may not see it
    ORA-06512: at “CCASTANEDA.CHECK_SALARY”, line 5
    ORA-04088: error during execution of trigger ‘CCASTANEDA.CHECK_SALARY’


Escribe un comentario