viernes, 31 de octubre de 2014

Trabajando con JOB en oracle 11g

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;
/