/*

Para automatizar tarefas (jobs) o Oracle possui dois recursos o DBMS_JOBS e DBMS_SCHEDULER. 

O DBMS_SCHEDULER foi introduzido à partir da versão 10g, assim descidir que estava no hora de atulizar os artigos.

 

Embora este artigo foque em JOB ORACLE, perceba que abordei alguns metadados para confirmar se o objeto como

tabela, job e procedure existiam.

 

Step by Step...

 

1. criaremos uma tabela que vai armazenar :

O nome da tabela 

Quantidade de registro.

E data da gravação do log

 

2. Criaremos uma PROCEDURE que sempre que for executada,

vai inserir um registro na tabela criada no item 1

 

3. Criaremos um job e habilitaremos sua execução

 

4. Mais importante LIMPANDO O LABORATORIO

 

OBS :

Para os iniciantes aconselho o usuo do Oracle SQL Developer, e só pegar o que esta escrito aqui

e executar no banco de teste.

 

Se gostou ajuda ai com um pix O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.. :-) 

*/

 

-- > 1. 

CREATE TABLE A_GRAVA_LOG (nome_tabela VARCHAR2(50), quant_reg number, dia DATE DEFAULT sysdate);

-- vamos gravar um registro por teste ( repare que para evitar problema o campo dia foi criado Date Default

INSERT INTO A_GRAVA_LOG (nome_tabela,quant_reg) VALUES ('A_GRAVA_LOG',10);

INSERT INTO A_GRAVA_LOG (nome_tabela,quant_reg) VALUES ('A_GRAVA_LOG',(SELECT COUNT(*) FROM A_GRAVA_LOG));

COMMIT;

-- veja o que acabamos de gravar 

select * from A_GRAVA_LOG

 

-- > 2.

CREATE OR REPLACE PROCEDURE PRC_A_GRAVA_LOG IS

BEGIN

INSERT INTO A_GRAVA_LOG (nome_tabela,quant_reg) VALUES ('A_GRAVA_LOG',(SELECT COUNT(*) FROM A_GRAVA_LOG));

COMMIT;

END;

-- executando a procedure PRC_A_GRAVA_LOG

exec PRC_A_GRAVA_LOG;

-- Confirmando gravaçao 

select * from A_GRAVA_LOG

 

 

-- > 3.

BEGIN

DBMS_SCHEDULER.CREATE_JOB

(

JOB_NAME => 'A_GRAVA_LOG_JOB',

JOB_TYPE => 'STORED_PROCEDURE',

JOB_ACTION => 'PRC_A_GRAVA_LOG',

START_DATE => SYSTIMESTAMP,

REPEAT_INTERVAL => 'FREQ=SECONDLY;INTERVAL=10',

ENABLED => FALSE,

COMMENTS => 'REPARE QUE ENABLED FOI CRIADO COM FALSE E 

                 REPEAT_INTERVAL PODE SER FREQ=HOURLY

                 OU DIAS SEMANA ETC. CONSULTE NO GOOGLE'

);

END;

COMMIT WORK;

-- Verificando se o job foi criado.

select * from  ALL_SCHEDULER_JOBS

select * from  SYS.SCHEDULER$_JOB  where  PROGRAM_ACTION = 'PRC_A_GRAVA_LOG';

-- Verificando que o job não esta rodando

select * from A_GRAVA_LOG

 

/* Habilitar o JOB */

BEGIN

 DBMS_SCHEDULER.ENABLE('A_GRAVA_LOG_JOB');

END;

-- Apos espera 10 segundo repare que o job agora esta  rodando

select * from A_GRAVA_LOG

 

/* Desabilitando o JOB */

BEGIN

  DBMS_SCHEDULER.DISABLE('A_GRAVA_LOG_JOB');

END;

-- Apos espera 10 segundo repare que o job agora esta  rodando

select * from A_GRAVA_LOG

 

-- > 4. 

/*

                                        LIMPANDO O LABORATORIO 

            <<< NUNCA ESQUEÇA DISSO PROVEDORES DE SERVIÇOS DE NUVEM ADORAM OS QUE NÃO LIMPAM O LABORATORIO >>>

*/

 

/* Remover a JOB */

BEGIN

  DBMS_SCHEDULER.DROP_JOB ('A_GRAVA_LOG_JOB');

END;

-- Verificando se o job foi APAGADO.

select * from  ALL_SCHEDULER_JOBS

select * from  SYS.SCHEDULER$_JOB  where  PROGRAM_ACTION = 'PRC_A_GRAVA_LOG';

 

/* Remover a Procedure */

-- VERIFICANDO SE A PROCEDURE EXISTE 

SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') AND OBJECT_NAME = 'PRC_A_GRAVA_LOG'

-- REMOVENDO A PROCEDURE

DROP PROCEDURE PRC_A_GRAVA_LOG

-- VERIFICANDO SE A PROCEDURE EXISTE 

SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') AND OBJECT_NAME = 'PRC_A_GRAVA_LOG'

 

-- VERIFICANDO SE A TABELA EXISTE 

SELECT tablespace_name, table_name, owner FROM all_tables WHERE table_name= 'A_GRAVA_LOG';

-- REMOVENDO A TABELA

DROP TABLE A_GRAVA_LOG

-- VERIFICANDO SE A TABELA EXISTE 

SELECT tablespace_name, table_name, owner FROM all_tables WHERE table_name= 'A_GRAVA_LOG';