tecnologia | consultoria | banco de dados

Oracle - Job Scheduler

Nesta publicação será mostrado uma forma para agendamento de execuções automáticas no banco de dados Oracle.

No Oracle, a partir da versão 10G, a package DBMS_JOBS foi depreciada e disponibilizada a package DBMS_SCHEDULER.

Irei mostrar apenas a nova forma de execução, a qual permite consultar históricos de execução e, caso necessário, interromper a execução sem a necessidade de possuir privilégios de DBA (Database Administrator).


Tipos de frequência:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY

Tipos de intervalo:
O valor padrão é 1 e o valor máximo é 999

--CRIANDO UM JOB

BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JB_MEU_JOB'
,JOB_TYPE => 'STORED_PROCEDURE'
,JOB_ACTION => 'SCHEMA.PRC_MINHA_PROCEDURE'
,START_DATE => ?FROM_TZ(SYSTIMESTAMP,'-03:00')
,REPEAT_INTERVAL => 'FREQ=SECONDLY;INTERVAL=30'
,AUTO_DROP => FALSE
,COMMENTS => 'JOB QUE EXECUTA A PROCEDURE SCHEMA.PRC_MINHA_PROCEDURE A CADA 30 SEGUNDOS'
,ENABLED => TRUE
);
END;
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
JOB_NAME => 'JB_MEU_JOB'
,JOB_TYPE => 'PLSQL_BLOCK'
,JOB_ACTION => '
/*
PROPÓSITO: JOB DE EXEMPLO COM BLOCO PL/SQL
REVISÕES:
Ver Data Autor Descrição
--------- ---------- ------------------ ---------------------------------
1.0 11/05/2016 Leandro Sacramento 1) Criação

*/
DECLARE
V_COUNT NUMBER := NULL;
BEGIN
SELECT COUNT(1)
INTO V_COUNT
FROM VW_MINHA_VIEW
WHERE DS_COLUNA IS NULL;
IF V_COUNT > 0 THEN
PRC_MINHA_PROCEDURE();
END IF;
'
,START_DATE => FROM_TZ(SYSTIMESTAMP,'-03:00')
,REPEAT_INTERVAL => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=8,9,10,11,12,13,14,15; BYMINUTE=0; BYSECOND=0'
,AUTO_DROP => FALSE
,COMMENTS => 'JOB QUE EXECUTA A PROCEDURE SCHEMA.PRC_MINHA_PROCEDURE A CADA 30 SEGUNDOS'
,ENABLED => TRUE
);
END;

--EXECUTAR O JOB

BEGIN
DBMS_SCHEDULER.RUN_JOB('SCHEMA.JB_MEU_JOB',TRUE);
END;

--PARAR EXECUÇÃO DO JOB

BEGIN
DBMS_SCHEDULER.STOP_JOB
(
job_name => 'SCHEMA.JB_MEU_JOB',
force => TRUE
);
END;

--DESABILITAR JOB

BEGIN
DBMS_SCHEDULER.DISABLE(NAME => 'SCHEMA.JB_MEU_JOB', force => TRUE);
END;

--HABILITAR JOB

BEGIN
DBMS_SCHEDULER.ENABLE(NAME => 'SCHEMA.JB_MEU_JOB');
END;

--ALTERANDO UM SCHEDULE

BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE
(
NAME => 'SCHEMA.JB_MEU_JOB',
ATTRIBUTE => 'REPEAT_INTERVAL',
VALUE => 'FREQ=DAILY; BYHOUR=15; BYMINUTE=30'
);
END;

--EXCLUINDO UM JOB

BEGIN
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'SCHEMA.JB_MEU_JOB', FORCE => TRUE);
END;

--LIMPAR LOG MAIORES QUE 10 DIAS

BEGIN
DBMS_SCHEDLER.PURGE_LOG(log_history => 10, job_name => 'SCHEMA.JB_MEU_JOB');
END;

--HISTÓRICO DE EXECUÇÕES DOS JOBS

SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;

--MOSTRAR TODOS OS JOBS

SELECT JOB_NAME, STATE, LAST_START_DATE
FROM USER_SCHEDULER_JOBS;
Data publicação: 21:13 11/05/2016

Oracle - Estruturas de Controle

1) Instrução IF

IF <CONDITION> THEN
STATEMENT1;
STATEMENT2;
...
[ELSIF <CONDITION> THEN
STATEMENT1;
...]
[ELSE
STATEMENT1;
...]
END IF;

2) Instrução CASE

CASE <SELECTOR>
WHEN <EXPRESSION1> THEN <STATEMENT1>
WHEN <EXPRESSION2> THEN <STATEMENT2>
WHEN <EXPRESSION3> THEN <STATEMENT3>
...
[ELSE STATEMENT N]
END;

3) Instrução LOOP

LOOP
<STATEMENT1>;
<STATEMENT2>;
<STATEMENT3>;
...
EXIT [WHEN <CONDITION>];
END LOOP;

WHILE <CONDITION> LOOP
<STATEMENT1>;
<STATEMENT2>;
...
END LOOP;
FOR counter IN [REVERSE] lower..upper LOOP
<STATEMENT1>;
<STATEMENT2>;
<STATEMENT3>;
...
END LOOP;

DECLARE
lower NUMBER := 1;
upper NUMBER := 100;
BEGIN
FOR i IN lower..upper LOOP
DBMS_OUTPUT.PUTLINE('Counter: ' || TO_CHAR(i));
END LOOP;
END;

BEGIN
<<loop1>>
FOR i IN 1..5 LOOP
<<loop2>>
FOR j IN 1..10 LOOP
DBMS_OUTPUT.PUTLINE('i X j ' || TO_CHAR(i * j));
END LOOP loop2;
END LOOP loop1;
END;
Data publicação: 22:28 09/03/2016

Oracle - Exportar dados para Excel (Spool csv)

Excel.bat:
Arquivo com a configuração de conexão com o banco de dados e o arquivo SQL a ser executado.

SQLPLUS schema@servidor/senha @SQL/Excel.sql

Excel.sql:
Arquivo com as configurações do spool e local para geração do arquivo CSV.

SET UNDERLINE OFF 
SET TERM OFF
SET ECHO OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
SET HEADING OFF
SET FEEDBACK OFF
SET PAUSE OFF
SET PAGESIZE 0
SET LINESIZE 2000
SET VERIFY OFF
SET COLSEP ';'
SPOOL RETORNO/EXCEL.CSV
SELECT
A.EMPLOYEE_ID
,A.FIRST_NAME
,A.LAST_NAME
,A.EMAIL
,A.PHONE_NUMBER
,TO_CHAR(A.HIRE_DATE,'DD/MM/RRRR') AS HIRE_DATE
,A.JOB_ID
,A.SALARY
,TO_CHAR(A.COMMISSION_PCT, 'FM999G999G990D00', 'NLS_NUMERIC_CHARACTERS=,.') AS COMMISSION_PCT
,A.MANAGER_ID
,A.DEPARTMENT_ID
FROM EMPLOYEES A;
SPOOL OFF
EXIT;
Data publicação: 23:53 24/11/2015
Perfil
Olá jovem Padawan, seja bem vindo! Este site foi criado com o intuito de compartilhar um pouco de conhecimento de Tecnologia da Informação e Business Intelligence.

Linkedin  Youtube

"O sorriso é o símbolo do vencedor." (Masaaki Hatsumi)


Leandro Sacramento, Todos os direitos reservados - 2012 - 2020