Sunday, February 9, 2020

dbms_scheduler Job con parámetros / adding parameters to a Job / Oracle

Aquí les mostrare como podemos ejecutar procedimientos almacenados que necesiten parámetros a través de un Job.



Comúnmente usado cuando lanzamos un proceso y no queremos que el usuario este esperando hasta que finalice si no que lo ejecutamos en segundo plano.

Primero creamos nuestro procedimiento de prueba, en este caso con 2 parámetros:


create or replace package BLOG_ANGEL as

procedure test_2_param (
   p_arg1 in varchar2 default null,
   p_arg2 in number   default null);

end;


create or replace package body "BLOG_ANGEL" is
procedure TEST_2_PARAM(P_ARG1 IN VARCHAR2
      ,P_ARG2 IN NUMBER
)
as
begin
 null; /* insert procedure code */
 dbms_output.put_line (P_ARG1);
 dbms_output.put_line (P_ARG2);
end TEST_2_PARAM;
 

end "BLOG_ANGEL";


La creación del Job
En la documentacion podemos ver diferentes formas de instanciar un JOB dependiendo de nuestro caso.

StartDate: -- se ejecutara 10 segundos despues de creado el job
Enabled: -- muy importante no habilitarlo sin haber definido los parámetros primero
AutoDrop: -- auto eliminar una vez ejecutado el job


begin
dbms_scheduler.create_job(job_name          => 'ba_test_params_job' , 
      job_type            => 'STORED_PROCEDURE',
      job_action          => 'BLOG_ANGEL.test_2_param',
      number_of_arguments => 2,
      start_date          =>  systimestamp + interval '10' second, -- se ejecutara 10 segundos despues de creado el job
      end_date            => null, 
      enabled             => false, -- muy importante no habilitarlo sin haber definido los parametros primero
      auto_drop           => true, -- auto eliminar una vez ejecutado el job
      comments            => 'Job que recibe dos parametros y se ejecuta 10 segundos despues' 
        );
end;

Ahora definimos los parámetros:


begin
  dbms_scheduler.set_job_argument_value(
   job_name                => 'ba_test_params_job',
   argument_position       => 1,
   argument_value          => 'DATO1');
  
  dbms_scheduler.set_job_argument_value(
   job_name                => 'ba_test_params_job',
   argument_position       => 2,
   argument_value          => 'DATO2');
end;

Y luego lo habilitamos:


dbms_scheduler.enable('ba_test_params_job');

Dejo el script para que lo puedas ejecutar y probar.

Demo 

En la demo ejecuto el JOB que inserta los nombre y edad, pero esto recién ocurre 10 segundos después, puede probar dando click a ejecutar job y luego refrescar el reporte, la información no será guardada hasta 10 segundos después de ser ejecutado.





Share:

Subscribe to my Newsletter

Acerca de mi:

img

Ing. Angel O. Flores Torres, soy Ingeniero de Sistemas e Ingeniero de Aplicaciones Oracle Apex, he trabajado con Oracle Apex 5 y 5.1 desde el 2017, En los ultimos años he desarrollado habilidades en CSS, JavaScript, Jquery y PlSql , I specialize in Oracle APEX (Oracle Application Express )

Followers

Popular Posts