hola, este dia en mi trabajo se me asigno la tarea de crear un job, para mi no es problema, pero que pasa si alguien no sabe?? , entonces les dejo este pequenio manual, ha sido probado en la version 11g.
1) primero vamos a crear una tabla la que llenaremos por medio del JOB
CREATE TABLE TMP_BORRAME_PRUEBA
(
DESCRIPCION VARCHAR2(100 BYTE),
FECHA DATE
);
2) creamos un procedimiento PL/SQL para ser llamado desde el JOB
CREATE OR REPLACE procedure prc_tmp_borrame
is
v_contador number(5) := null;
begin
select count(1)
into v_contador
from tmp_borrame_prueba;
insert into tmp_borrame_prueba
(descripcion, fecha)
values ('Registros contados :'|| to_char(v_contador), sysdate);
commit;
end;
/
3) lo siguiente , puedes usarlo de acuerdo a tu conveniencia
--- para ver todos los jobs del esquema ONDE EJSTOY connected
SELECT JOB,
SCHEMA_USER,
LAST_DATE,
NEXT_DATE,
INTERVAL,
WHAT
FROM DBA_JOBS
WHERE SCHEMA_USER = (SELECT USER FROM DUAL);
BEGIN
DBMS_JOB.BROKEN( <NUMERO JOB>, FALSE ); -- pone estado on line el JON [dependiendo tu caso]
DBMS_JOB.BROKEN( <NUMERO JOB>, TRUE ); -- pone estado OFF line el JON [dependiendo tu caso]
COMMIT;
END;
BEGIN
DBMS_JOB.REMOVE ( <NUMERO JOB> ); ---BORRA ELJOB
COMMIT;
END;
-- forma para crear un job.....
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( JOB => X
,WHAT => -- colocamos entre [BEGIN] ..... [ END; ] el codigo pl que deseamos ejecutar
'begin
prc_tmp_borrame;
end;'
,NEXT_DATE => TO_DATE('31/10/2014 14:36:37','dd/mm/yyyy hh24:mi:ss') --- fecha y hora de inicio
,INTERVAL => 'SYSDATE+1/1440' --- intervalo de ejecucion
--,interval => 'TRUNC(SYSDATE+1)+3.5/24' -- para ejecutarlo todos los dias a las 3:30 .....
,NO_PARSE => FALSE --- vale chonga :D
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || TO_CHAR(X));
COMMIT;
END;
/
Gracias hermano buen articulo
ResponderBorrar