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.

Published by Angel O. Flores Torres

System engineer, Applications engineer, working with C# and Oracle Apex 5, 5.1 since 2017. I specialize in Oracle APEX (Oracle Application Express )

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: