Leandro Sacramento de Paula
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
--EXECUTAR O JOB
--PARAR EXECUÇÃO DO JOB
--DESABILITAR JOB
--HABILITAR JOB
--ALTERANDO UM SCHEDULE
--EXCLUINDO UM JOB
--LIMPAR LOG MAIORES QUE 10 DIAS
--HISTÓRICO DE EXECUÇÕES DOS JOBS
--MOSTRAR TODOS OS JOBS
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
2) Instrução CASE
3) Instrução LOOP
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.
Excel.sql:
Arquivo com as configurações do spool e local para geração do arquivo CSV.
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

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.
Tags das Publicações
"O sorriso é o símbolo do vencedor." (Masaaki Hatsumi)