| 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 | ||||||
|
Mayo 29, 2008 a las 7:37 pm
Ejemplo de trigger
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON copia_empleados
BEGIN
IF(TO_CHAR(SYSDATE,’DY’)IN(‘SAT’,'SUN’)) OR
(TO_CHAR(SYSDATE,HH24:MI)
NOT BETWEEN ‘08:00′ AND ‘18:00′)
THEN RAISE APPLICATION_ERROR (-20500,’Solo se puede insertar empleados en horas de trabajo.’);
END IF;
END;
/
En este ejemplo el trigger o disparador, se ejecutara cuando se trate de ingresar un empleado dentro de la tabla copia_empleado, en horas no laborables, impidiendo asi que esa acción de insercion se lleve a efecto
Mayo 29, 2008 a las 7:47 pm
Aqui coloco un ejemplo sobre la creación de trigger donde se restringe la insercción dentro de la tabla empleados en ciertas horas de trabajo de lunes a viernes…
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON employees
BEGIN
IF (TO_CHAR(SYSDATE,’DY’)IN(‘SAT’,'SUN’)) OR
(TO_CHAR(SYSDATE,’HH24:MI’)
NOT BETWEEN ‘08:00′ AND ‘18:00′)
THEN RAISE_APPLICATION_ERROR (-20500,’you may
insert into EMPLOYEES table only
during business hours.’);
END IF;
END;
Respuesta:
Trigger created.
Mayo 29, 2008 a las 8:01 pm
El ejercicio de la página 16-14; Crea un trigger que prohíbe el ingreso de datos en la tabla EMPLEADOS a una hora que no esté entre las 8 de la mañana y las 6 de la tarde. Un intento de hacerlo, presentará la excepción programada en el trigger.
CREATE TABLE EMPLEADOS AS SELECT * FROM EMPLOYEES;
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON EMPLEADOS
BEGIN
IF (TO_CHAR(SYSDATE, 'DY') IN ('SAT', 'SUN')) OR (TO_CHAR(SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00') THEN
RAISE_APPLICATION_ERROR(-20500, 'You may insert into EMPLOYEES table only during business hours');
END IF;
END;
/
INSERT INTO EMPLEADOS (employee_id, last_name, first_name, email, hire_date, job_id, salary, department_id)
VALUES (300, 'Smith', 'Rob', 'RSMITH', SYSDATE, 'IT_PROG', 4500, 60);
Salida del programa:
Table created.
Trigger created.
INSERT INTO EMPLEADOS (employee_id, last_name, first_name, email, hire_date, job_id, salary, department_id)
*
ERROR at line 1:
ORA-20500: You may insert into EMPLOYEES table only during business hours
ORA-06512: at "JANGAMARCA.SECURE_EMP", line 3
ORA-04088: error during execution of trigger 'JANGAMARCA.SECURE_EMP'
Mayo 29, 2008 a las 8:04 pm
En este ejemplo expandido:
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON empleados
BEGIN
IF (TO_CHAR(SYSDATE, ‘DY’) IN (‘SAT’, ‘SUN’)) OR
(TO_CHAR(SYSDATE, ‘HH24:MI’) NOT BETWEEN ‘08:00′ AND ‘18:00′)
THEN
IF DELETING THEN
RAISE_APPLICATION_ERROR (-20502, ‘You may delete only during business hours.’) ;
ELSIF INSERTING THEN
RAISE_APPLICATION_ERROR (-20500, ‘You may insert only during business hours.’) ;
ELSIF UPDATING (‘SALARY’)THEN
RAISE_APPLICATION_ERROR (-20503, ‘You may update SALARY only during business hours.’) ;
ELSE
RAISE_APPLICATION_ERROR (-20504, ‘You may update EMPLEADOS table only during normal hours.’) ;
END IF;
END IF;
END;
/
show errors
–Esto tambien lo puedo probar
END IF;
END;
/
Se demuestra que se pueden combinar diferentes eventos disparadores para el trigger, en este caso sobre la tabla EMPLEADOS que es copia de employees.
Aquí se chequea que las operaciones de insercion, borrado o actualización del campo SALARY sólo durante horas laborables (8:00-18:00)
Mayo 30, 2008 a las 7:32 pm
En los siguiente URLS, pueden encontrar código PL/SQL para enviar emails desde la base de datos. Normalmente se usa la librería utl_smtp
http://www.quest-pipelines.com/newsletter-v2/smtp.htm
http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/Utl_Smtp_Sample.html
http://www.dba-oracle.com/t_email_mailing_messages_plsql.htm
Junio 2, 2008 a las 8:33 pm
El siguiente codigo es útil para enviar un mail cuando un usuario se loguea a una determinada base de datos.
CREATE OR REPLACE TRIGGER LOGON_MAIL
AFTER LOGON ON database
DECLARE
v_connection UTL_SMTP.CONNECTION;
v_reply UTL_SMTP.REPLY;
BEGIN
v_connection := UTL_SMTP.OPEN_CONNECTION(‘gdr3.utpl.edu.ec’,25);
v_reply := UTL_SMTP.HELO(v_connection,’mail.dominio.com’);
v_reply := UTL_SMTP.MAIL(v_connection,’remitente@dominio.com’);
v_reply := UTL_SMTP.RCPT(v_connection,’destinatario@otrodominio.com’);
v_reply := UTL_SMTP.DATA(v_connection,’USUARIO ‘||USER || ‘FECHA INGRESO ‘||SYSDATE);
v_reply := UTL_SMTP.QUIT(v_connection);
END;
/
Esta implementado como trigger el cual se desencadena en el momento en que cualquier usuario ingresa a la base de datos y se envia un mail a una persona
Junio 2, 2008 a las 8:41 pm
Aqui un ejemplo de 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.
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;
Trigger created.
Septiembre 3, 2008 a las 2:12 am
Trasteando con el paquete UTL_SMTP resulta que al ejecutar utlsmtp.sql he perdido el body del package.
¿ cómo puedo recuperarlo e incorporarlo a la base de datos para poder utilizarlo ?
Gracias
Saludos
Febrero 22, 2009 a las 8:35 am
Cómo hacer un desencadenador para registrar las modificaciones que un usuario realice en una tabla?. gracias