Vous êtes sur la page 1sur 9

1

Criao de Loop no Oracle Data Integrator

Este documento tem por objetivo, evidenciar passo-a-passo, como realizar a criao de LOOP no Oracle Data Integrator (ODI), bem como corrigir o erro (esperado) para sada do LOOP. Este documento teve o apoio de experts do Oracle Data Integrator como Cezar Santos (www.odiexperts.com) e Alan Yves. Agradeo a eles a oportunidade de estar repassando este conhecimento!

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

NDICE
Script de criao dos objetos de banco (Tabelas) ............................................................................................................ 3 Criao dos Objetos e Fluxo do Oracle Data Integrator ................................................................................................... 4 Cenrio: ................................................................................................................................................................................ 4 Erro apresentado:................................................................................................................................................................ 4 Motivo: .................................................................................................................................................................................. 4 Soluo apresentada:........................................................................................................................................................ 4 A PACKAGE (como ficar) no final deste exemplo: ..................................................................................................... 5 Passo-a-passo como montar a package (com as variveis, a interface e a procedure) .................................... 5 Finalizando: Arrastando os objetos e montando a Package ........................................................................................... 7

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

Script de criao dos objetos de banco (Tabelas)


A seqncia de criao abaixo responsvel pela construo das tabelas (2) que sero utilizadas no exemplo.

-- Tabela origem create table produto (codigo number(05) ,descricao varchar2(500) ,data_entrada date default sysdate); insert into insert into insert into insert into insert into commit; produto produto produto produto produto (codigo,descricao) (codigo,descricao) (codigo,descricao) (codigo,descricao) (codigo,descricao) values values values values values (1,'CEBOLA'); (2,'TOMATE'); (3,'ALFACE'); (4,'ALMEIRO'); (5,'COUVE');

-- Tabela destino -- Apenas a descrio do produto -- Ser populada via ODI create table produto_target (descricao varchar2(500)); -- Querie da varivel vNome_Produto select prod.descricao from (select descricao, rownum as contador from produto) prod where prod.contador = 2 -- trocar o 2 por #vContador no ODI

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

Criao dos Objetos e Fluxo do Oracle Data Integrator


Nota Importante: Esses passos so apenas para a criao dos objetos avulsos. No se trata ainda de arrast-los para a package. Este passo ser documentado separadamente, no final deste.

Cenrio:
O motivo deste documento explanar de forma detalhada, como se criar um LOOP no Oracle Data Integrator (ODI) e, como finalizar, sair deste LOOP sem que todo o projeto seja executado com erros.

Erro apresentado:

ODI-17511: No value to be set do variable DefDate: null

Motivo:
No exemplo deste documento, na tabela de origem, teremos 5 produtos. Porm, o ODI continua o LOOP, saindo apenas com erro, ou seja, passando o valor 6 para a querie que recupera a descrio do produto e, a mesma retornando nulo (como se fosse o NO_DATA_FOUND do PL/SQL), ocasionado-se um erro e, finalizando-se toda a package do ODI com erro na execuo.

Soluo apresentada:
Criao de uma procedure do ODI, sem nenhum Step, apenas para apontamento do KO quando se tenta recuperar o valor para o sexto produto, que no existe.

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

A PACKAGE (como ficar) no final deste exemplo:

Passo-a-passo como montar a package (com as variveis, a interface e a procedure)


1) Criao da varivel vContador Esta varivel servir como um ndice e, ser incrementada durante o processo do LOOP. o Definition Alfanumrica Valor Default = 0 o Refreshing

Select Query: select NVL(#vContador + 1, 1) as Contador from dual Esta a querie responsvel por seu auto-incremento (soma ele + 1 na prxima passada do Loop ) 2) Criao da varivel vNome_Produto Esta varivel ir recuperar a descrio do produto (da tabela Produto), com base no Contador que foi criado no passo anterior, que ser utilizado na clusula where, conforme demonstrado no Refreshing abaixo. o Definition Alfanumrica Valor Default = 0 o Refreshing

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

Select Query: favor verificar no script de criao dos objetos, pois essa querie est l descrita.

3) Criao da Interface A criao da interface descrita abaixo em uma nica imagem, por se tratar de uma interface bem simples, composta apenas de um nico source (tabela produto) e, um nico target (tabela produto_target)

No foi detalhada a criao da Interface neste documento, porm, caso necessrio, coloco-me disposio para a construo de um novo documento contendo esta explicao.

4) No ponto 4, utilizada novamente a varivel vContador, porm, com uma propriedade diferente, quando for mapeada na package: Refreshing Variable a. NOTA IMPORTANTE: No criar outra varivel. Ser reutilizada a varivel criada no passo 1.

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

Finalizando: Arrastando os objetos e montando a Package


1) Criar uma package, no exemplo, criei com o nome de LOOP_PRODUTO:

2) Clicar no rodap (ainda em Definition), na aba Diagram:

3) O prximo passo, ser arrastar os objetos para o diagrama, deixando a imagem do diagrama como esta acima. NOTA IMPORTANTE: A numerao no ir aparecer. Foi colocada apenas para ilustrar a seqncia e, detalhar cada item no prximo passo. 1) Arrastar Varivel vContador i. Aba: General ii. Type: Set Variable iii. Assign: Value = 1

Ligao da varivel vContador com vNome_Produto v. Aba: Advanced vi. Processing after success (OK): Execute step vNome_Produto

iv.

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator

vii. 2) Arrastar Varivel vNome_Produto i. Aba: General ii. Type: Refresh Variable

Ligao da varivel vNome_Produto com a interface Produto iv. Aba: Advanced v. Processing after success (OK): Execute step produto

iii.

vi. 3) Arrastar Interface produto i. Aba: General ii. Type: Flow (Interface)

Ligao da interface Produto vNome_Produto com a varivel vContador (novamente, porm, de outro tipo) iv. Aba: Advanced v. Processing after success (OK): Execute step vContador

iii.

vi. 4) Arrastar novamente varivel vContador (com um tipo diferente) i. Aba: General ii. Type: Refresh Variable

iii. Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )

Criao de Loop no Oracle Data Integrator


Ligao da varivel vContador com a varivel vNome_Produto iv. Aba: Advanced v. Processing after success (OK): Execute step vNome_Produto

vi. 5) Arrastar Procedure PRC_DUAL i. Nota Importante: Este passo ter seqncia de OK (sucesso) e KO (erro) ii. Voltar (clicar) na varivel vNome_Produto Ligao da varivel vNome_Produto com a procedure PRC_DUAL iii. Aba: Advanced iv. Processing after FAILURE (KO): Execute step PRC_DUAL

v. 6) O passo 5 deste documento, responsvel por no causar erro, quando o loop passar a sexta vez, tentando buscar o nome da cidade para a varivel vNome_Cidade. i. Este passo 5 quem no deixa todo o projeto dar erro, dando como finalizado com sucesso, pois, quando for dar o erro, ir executar uma procedcure sem nada, sem step algum. Esta a sada para esse tipo de erro e, sada do loop. Espero que o documento tenha auxiliado, agradeo novamente ao Cezar e ao Alan pela colaborao e, me coloco disposio para maiores esclarecimentos no processo. Dicas e sugestes, bem como crticas, sempre bem vindas! Grande abrao, Trevisolli WWW.trevisolli.com.br WWW.glufke.net paulotrevisolli@ig.com.br

Criao: Paulo Trevisolli ( www.trevisolli.com.br - http://br.linkedin.com/in/trevisolli ) Apoio: Cezar Santos (www.odiexperts.com) Alan Yves( http://www.linkedin.com/pub/alan-yves/24/b3a/861 )