| Convenio de derechos… en Ciencia y Desarrollo en Améric… | |
| marta en Loja Ecuador, Conozca mi … | |
| vane en Loja Ecuador, Conozca mi … |

My site is worth $2,053.
How much is yours worth?
| L | M | X | J | V | S | D |
|---|---|---|---|---|---|---|
| « Oct | ||||||
| 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 | 27 | 28 | 29 |
| 30 | ||||||
|
Junio 2, 2008 a las 8:40 pm
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;
Junio 2, 2008 a las 8:42 pm
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;
Junio 2, 2008 a las 8:44 pm
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;
Junio 2, 2008 a las 8:45 pm
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.
Junio 2, 2008 a las 8:52 pm
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’