Transcript
Page 1: ODI Tutorial - Desenvolvendo Procedures

ODI Tutorial

March 3

2012 Uso da ferramenta Oracle Data Integrator (ODI) para a construção de processos ETL (Extract, Transform and Load). Nesta série de tutoriais, utilizaremos o ODI para integrar dados de diferentes origens (bancos de dados diferentes e arquivos texto) para uma base de destino Oracle.

Desenvolvimento de Procedures

Page 2: ODI Tutorial - Desenvolvendo Procedures

Desenvolvimento de Procedures

Depois de configurar a Topologia para o nosso projeto, começaremos agora a

desenvolver as integrações e o primeiro passo nessa jornada é montar o ambiente de

origem, as tabelas, as visões, as procedures, enfim todos os objetos necessários para

criar a origem dos dados.

Neste post vou disponibilizar a maneira clássica da criação do ambiente e também

propor a utilização do módulo Designer do ODI contruíndo Procedures para exercer a

mesma função.

Mas sempre lembrando que devemos utilizar os objetos de Procedure com muita

cautela, pois as procedures permitem a execução de ações bem complexas, incluindo

comandos SQL. Além disso, elas permitem a utilização das conexões source e target e

ainda suportam biding, isto significa que é possível mover dados de um lado para o

outro usando apenas as procedures.

Os desenvolvedores que se sentem à vontade com código SQL ficam sériamente

tentados a escrever código para fazer transformações e movimentação de dados ao

invés de desenvolver interfaces.

Existem alguns problemas quanto à isso:

Procedures contém código manual que precisa sofrer manutenção.

Procedures não mantém referências com os outros artefatos ODI como

datastores, modelos, etc, fazendo com que a manutenção seja muito mais

complexa comparado às interfaces.

Procedures nunca devem ser utilizadas para mover ou transformar dados,

essas operações devem ser feitas utilizando as interfaces.

Outra importante informação que devemos ter quando iniciamos um projeto de

desenvolvimento é a organização. Organize o seu projeto no inicio da construção, pois

será muito mais fácil realizar o desenvolvimento e manutenção posterior.

O gerenciamento e a organização são pontos críticos quando estamos falando de

integração de dados, o ODI oferece muitas ferramentas que ajudam a organizar o

desenvolvimento e o ciclo de vida do projeto, tais como: perfis de segurança, pastas,

marcadores, versionamento, importação e exportação, impressão de documentação,

etc.

Utilize todas as ferramentas disponíveis para gerenciar o seu projeto. Defina a

organização do projeto, a padronização de nomes e tudo o que pode evitar o caos

depois que o projeto tiver iniciado. Em outros posts iremos detalhar cada uma dessas

ferramentas e features e lembre-se sempre ORGANIZE O SEU PROJETO NO INÍCIO.

Neste post iremos explorar conforme mencionado o objeto Procedure, também

podemos encontrar na literatura e na versão em português do ODI a nomenclatura

Procedimento.

Page 3: ODI Tutorial - Desenvolvendo Procedures

Procedure ou Procedimento como o nome indica, são objetos em que são escritos

qualquer tipo de procedimento “extra” que se faça necessário no processo de ETL.

Podemos criar procedimentos que contenham vários tipos de códigos, de diferentes

tecnologias suportadas pelo ODI, como por exemplo, escrever um procedimento em

PL/SQL, em Java, em Jython, etc.

Modelagem do Sistema

Antes de planejar a criação das PROCEDURES devemos planejar a criação do nosso

banco de dados, lembrando que devemos sempre ORGANIZAR O PROJETO NO INÍCIO,

para o nosso estudo contruiremos um SISTEMA DE CONTROLE DE VENDAS.

O modelo proposto representa uma estrutura básica de vendas de mercadorias, a

estrutura de tabelas representa um modelo clássico de Data Warehouse na origem,

neste modelo teremos as tabelas CLIENTES, PRODUTOS, GRUPO ITEM, ITENS DE

ESTOQUE, TIPO DE CLIENTES, VENDEDORES E FATURAMENTO. No destino estaremos

trabalhando com o conceito de Data Mart criando uma estrutura de cubos e dimensões

para capturar as informações de faturamento para gerenciamento e análise de

performance de vendas, neste modelo teremos as tabelas de Dimensão para

CLIENTES, PRODUTOS, TEMPO (MESES, ANOS, SEMANAS e ETC.), VENDEDORES e a

tabela FATO onde serão registrados os KPI’s e/ou indicadores para montagem das

análises.

Page 4: ODI Tutorial - Desenvolvendo Procedures

Criando as tabelas – Modelo Clássico

Modelo Data Warehouse ( User/Schema – DW.ORIGEM )

-- Tabela TIPO_CLIENTE

CREATE TABLE "DW_ORIGEM"."TIPO_CLIENTE"

( "CD_TIPO_CLIENTE" NUMBER(*,0) NOT NULL ENABLE,

"DS_TIPO_CLIENTE" VARCHAR2(30),

PRIMARY KEY ("CD_TIPO_CLIENTE") ENABLE ) ;

-- Tabela CLIENTE

CREATE TABLE "DW_ORIGEM"."CLIENTE"

( "CD_CLIENTE" NUMBER(*,0) NOT NULL ENABLE,

"NM_CLIENTE" CHAR(30),

"CD_TIPO_CLIENTE" NUMBER(*,0),

PRIMARY KEY ("CD_CLIENTE") ENABLE,

FOREIGN KEY ("CD_TIPO_CLIENTE") REFERENCES "DW_ORIGEM"."TIPO_CLIENTE"

("CD_TIPO_CLIENTE") ON DELETE SET NULL ENABLE );

-- Tabela VENDEDOR

CREATE TABLE "DW_ORIGEM"."VENDEDOR"

( "CD_VENDEDOR" NUMBER(*,0) NOT NULL ENABLE,

"NM_VENDEDOR" CHAR(30),

"PERC_COM" NUMBER(5,2),

PRIMARY KEY ("CD_VENDEDOR") ENABLE ) ;

-- Tabela FATURAMENTO

CREATE TABLE "DW_ORIGEM"."FATURAMENTO"

( "NUM_NF" NUMBER(*,0) NOT NULL ENABLE,

"CD_VENDEDOR" NUMBER(*,0) NOT NULL ENABLE,

"CD_CLIENTE" NUMBER(*,0) NOT NULL ENABLE,

"DT_VENDA" DATE NOT NULL ENABLE,

"TOT_NF" NUMBER(9,2),

"LOCAL_VENDA" VARCHAR2(30),

PRIMARY KEY ("NUM_NF") ENABLE,

FOREIGN KEY ("CD_CLIENTE") REFERENCES "DW_ORIGEM"."CLIENTE"

("CD_CLIENTE") ENABLE,

FOREIGN KEY ("CD_VENDEDOR") REFERENCES "DW_ORIGEM"."VENDEDOR"

("CD_VENDEDOR") ENABLE ) ;

Page 5: ODI Tutorial - Desenvolvendo Procedures

-- Tabela GRUPO_ITEM

CREATE TABLE "DW_ORIGEM"."GRUPO_ITEM"

( "CD_GRUPO_ITEM" NUMBER(*,0) NOT NULL ENABLE,

"NM_GRUPO_ITEM" CHAR(30),

PRIMARY KEY ("CD_GRUPO_ITEM") ENABLE ) ;

-- Tabela ITEM_ESTOQUE

CREATE TABLE "DW_ORIGEM"."ITEM_ESTOQUE"

( "CD_GRUPO_ITEM" NUMBER(*,0) NOT NULL ENABLE,

"CD_ITEM" NUMBER(*,0) NOT NULL ENABLE,

"NM_ITEM" VARCHAR2(40) NOT NULL,

"UNIDADE" VARCHAR2(5),

"PRECO" NUMBER(9,2),

"QTE_ESTOQUE" NUMBER(*,0),

PRIMARY KEY ("CD_GRUPO_ITEM", "CD_ITEM") ENABLE,

FOREIGN KEY ("CD_GRUPO_ITEM") REFERENCES

"DW_ORIGEM"."GRUPO_ITEM" ("CD_GRUPO_ITEM") ENABLE ) ;

-- Tabela ITEM_NF

CREATE TABLE "DW_ORIGEM"."ITEM_NF"

( "NUM_NF" NUMBER(*,0) NOT NULL ENABLE,

"CD_GRUPO_ITEM" NUMBER(*,0) NOT NULL ENABLE,

"CD_ITEM" NUMBER(*,0) NOT NULL ENABLE,

"QTE_VENDA" NUMBER(*,0),

"VLR_UNITARIO" NUMBER(9,2),

PRIMARY KEY ("NUM_NF", "CD_GRUPO_ITEM", "CD_ITEM") ENABLE,

FOREIGN KEY ("CD_GRUPO_ITEM", "CD_ITEM") REFERENCES

"DW_ORIGEM"."ITEM_ESTOQUE" ("CD_GRUPO_ITEM", "CD_ITEM") ENABLE ) ;

Page 6: ODI Tutorial - Desenvolvendo Procedures

Modelo Data Mart ( User/Schema – DW.DESTINO )

-- Tabela DIM_CLIENTE

CREATE TABLE "DW_DESTINO"."DIM_CLIENTE"

( "CD_CLIENTE" NUMBER(*,0),

"NM_CLIENTE" VARCHAR2(30),

"CD_TIPO_CLIENTE" NUMBER(*,0),

"DS_TIPO_CLIENTE" VARCHAR2(30),

"ID_CLIENTE" NUMBER(*,0) NOT NULL ENABLE,

CONSTRAINT "DIM_CLIENTE_PK" PRIMARY KEY ("ID_CLIENTE") ENABLE ) ;

-- Tabela DIM_PRODUTO

CREATE TABLE "DW_DESTINO"."DIM_PRODUTO"

( "ID_PRODUTO" NUMBER(*,0) NOT NULL ENABLE,

"CD_ITEM" NUMBER(*,0),

"CD_GRUPO_ITEM" NUMBER(*,0),

"UNIDADE" VARCHAR2(5),

"NM_ITEM" VARCHAR2(40),

"NM_GRUPO_ITEM" VARCHAR2(30),

CONSTRAINT "DIM_PRODUTO_PK" PRIMARY KEY ("ID_PRODUTO") ENABLE ) ;

-- Tabela DIM_TEMPO

CREATE TABLE "DW_DESTINO"."DIM_TEMPO"

( "ID_TEMPO" NUMBER NOT NULL ENABLE,

"DATA_DIA" DATE,

"DIA" NUMBER,

"DIA_SEMANA" VARCHAR2(50),

"MES" NUMBER,

"MES_ANO" VARCHAR2(50),

"ANO" NUMBER,

"TURNO" VARCHAR2(50),

CONSTRAINT "DIM_TEMPO_PK" PRIMARY KEY ("ID_TEMPO") ENABLE ) ;

-- Tabela DIM_VENDEDOR

CREATE TABLE "DW_DESTINO"."DIM_VENDEDOR"

( "ID_VENDEDOR" NUMBER NOT NULL ENABLE,

"CD_VENDEDOR" NUMBER,

"NM_VENDEDOR" VARCHAR2(30),

"PERC_COM" NUMBER(5,2),

CONSTRAINT "DIM_VENDEDOR_PK" PRIMARY KEY ("ID_VENDEDOR") ENABLE ) ;

Page 7: ODI Tutorial - Desenvolvendo Procedures

-- Tabela FATO_VENDAS

CREATE TABLE "DW_DESTINO"."FATO_VENDAS"

( "ID_PRODUTO" NUMBER NOT NULL ENABLE,

"ID_CLIENTE" NUMBER NOT NULL ENABLE,

"ID_VENDEDOR" NUMBER NOT NULL ENABLE,

"ID_TEMPO" NUMBER NOT NULL ENABLE,

"QTE_VENDA" NUMBER,

"PRC_VENDA" NUMBER(9,2),

FOREIGN KEY ("ID_PRODUTO") REFERENCES "DW_DESTINO"."DIM_PRODUTO"

("ID_PRODUTO") ENABLE,

FOREIGN KEY ("ID_CLIENTE") REFERENCES "DW_DESTINO"."DIM_CLIENTE"

("ID_CLIENTE") ENABLE,

FOREIGN KEY ("ID_VENDEDOR") REFERENCES "DW_DESTINO"."DIM_VENDEDOR"

("ID_VENDEDOR") ENABLE,

FOREIGN KEY ("ID_TEMPO") REFERENCES "DW_DESTINO"."DIM_TEMPO"

("ID_TEMPO") ENABLE ) ;

Page 8: ODI Tutorial - Desenvolvendo Procedures

Inserindo Dados – Modelo Clássico

Modelo Data Warehouse ( User/Schema – DW.ORIGEM )

-- DADOS PARA TABELA TIPO_CLIENTE

Insert into TIPO_CLIENTE (CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values

(5,'COMERCIO');

Insert into TIPO_CLIENTE (CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values

(6,'ARQUITETURA');

Insert into TIPO_CLIENTE (CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values

(7,'INFORMATICA');

Insert into TIPO_CLIENTE (CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values

(8,'INDUSTRIA');

Insert into TIPO_CLIENTE (CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values

(10,'BANCO');

-- DADOS PARA TABELA CLIENTE

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values

(1,'Sanders Roch',7);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values (2,'Pernal

Livi',8);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values

(3,'Marenghi Nor',5);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values (4,'OBrien

Van DerHor',6);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values (5,'Hanes

Alvis',10);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values

(7,'Rothman Chit',7);

Insert into CLIENTE (CD_CLIENTE,NM_CLIENTE,CD_TIPO_CLIENTE) values

(9,'Koonitz Scprect Tu',6);

-- DADOS PARA TABELA VENDEDOR

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values (1,'Maria

ELISA ANGE',9);

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values (4,'LUCas

Zardo dos reis',10);

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values

(5,'CLAUDIOMIRO A NUNES',8);

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values (15,'SILVIA

Maria',6);

Page 9: ODI Tutorial - Desenvolvendo Procedures

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values (10,'Mirna S

RIAT',6);

Insert into VENDEDOR (CD_VENDEDOR,NM_VENDEDOR,PERC_COM) values (11,'MarA L

Batista',4);

-- DADOS PARA TABELA FATURAMENTO

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(441,1,5,to_date('29/12/04','DD/MM/RR'),123.44,'Ijuí');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(442,4,2,to_date('30/12/04','DD/MM/RR'),58.14,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(12941,5,3,to_date('31/12/04','DD/MM/RR'),28.49,'Panambi');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(12942,5,3,to_date('01/01/05','DD/MM/RR'),1921.72,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(541,1,4,to_date('02/01/05','DD/MM/RR'),51.44,'Ijuí');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(642,11,5,to_date('03/01/05','DD/MM/RR'),23.14,'Panambi');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(2941,10,7,to_date('04/01/05','DD/MM/RR'),12.66,'Ijuí');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(1292,5,9,to_date('05/01/05','DD/MM/RR'),321.01,'Panambi');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(361,4,1,to_date('06/01/05','DD/MM/RR'),73.44,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(2,11,4,to_date('07/01/05','DD/MM/RR'),3.14,'Ijuí');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(191,15,1,to_date('08/01/05','DD/MM/RR'),62.66,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(122,5,2,to_date('09/01/05','DD/MM/RR'),31.64,'Ijuí');

Page 10: ODI Tutorial - Desenvolvendo Procedures

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(51,5,5,to_date('11/01/05','DD/MM/RR'),183.99,'Panambi');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(62,4,4,to_date('05/01/05','DD/MM/RR'),29.44,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(371,11,4,to_date('10/01/05','DD/MM/RR'),82.66,'Santa Rosa');

Insert into FATURAMENTO

(NUM_NF,CD_VENDEDOR,CD_CLIENTE,DT_VENDA,TOT_NF,LOCAL_VENDA) values

(1092,10,5,to_date('09/01/05','DD/MM/RR'),221.93,'Ijuí');

-- DADOS PARA TABELA GRUPO_ITEM

Insert into GRUPO_ITEM (CD_GRUPO_ITEM, NM_GRUPO_ITEM) values (7,

'Eletronicos');

Insert into GRUPO_ITEM (CD_GRUPO_ITEM, NM_GRUPO_ITEM) values (4, 'Livraria');

Insert into GRUPO_ITEM (CD_GRUPO_ITEM, NM_GRUPO_ITEM) values (5,

'Informatica');

Insert into GRUPO_ITEM (CD_GRUPO_ITEM, NM_GRUPO_ITEM) values (1, 'Artigos

Esportivos');

-- DADOS PARA TABELA ITEM_ESTOQUE

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 1, 'Cartucho CANON BC-02', 'UND', 72.5, 20);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 2, 'Cartucho EPSON 20093', 'UND', 65.1, 10);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 3, 'Cartucho HP 51629A', 'UND', 45.28, 17);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 36, 'Papel form. 80 1V br.c/3000 SP', 'CXA', 55.79,

6);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 31, 'Refil impr.EXTR.8508 51649A c1', 'CJT', 19.39,

7);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 47, 'Toner HP C 7115A p/laser 1200', 'UND', 245.61,

3);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (5, 50, 'Mouse CLONE c/saida serial', 'UND', 5.33, 3);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (4, 1, 'Cola TENAZ 500grs', 'TBO', 2.5, 20);

Page 11: ODI Tutorial - Desenvolvendo Procedures

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (4, 31, 'Caneta esfer.PARKER', 'PC', 5.8, 3);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (4, 33, 'Agenda', 'PC', 6.54, 8);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (4, 4, 'Album', 'PC', 12.78, 12);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (4, 41, 'Regua Metal', 'UND', 1.78, 81);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (7, 2, 'DVD', 'UND', 1222.5, 2);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (7, 4, 'Televisao 14 Pol.', 'PC', 445.8, 3);

Insert into ITEM_ESTOQUE (CD_GRUPO_ITEM, CD_ITEM, NM_ITEM, UNIDADE, PRECO,

QTE_ESTOQUE) values (7, 8, 'PlayStation', 'PC', 512.78, 8);

-- DADOS PARA TABELA ITEM_NF

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (2, 4, 1, 1, 3.14);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (51, 5, 2, 1, 65.1);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (51, 5, 3, 1, 48.28);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (51, 5, 1, 1, 70.61);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (12941, 5, 31, 1, 28.49);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (12942, 7, 2, 1, 1921.72);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (2941, 4, 33, 1, 12.66);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (1292, 5, 47, 1, 245.61);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (1292, 5, 2, 1, 75.4);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (1092, 5, 47, 1, 221.93);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (642, 4, 1, 8, 2.5);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (642, 5, 50, 1, 3.14);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (541, 5, 36, 1, 51.44);

Page 12: ODI Tutorial - Desenvolvendo Procedures

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (442, 5, 31, 2, 19.39);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (442, 4, 4, 1, 19.36);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (441, 5, 1, 1, 123.44);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (371, 5, 36, 1, 82.66);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (361, 4, 31, 10, 5.8);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (361, 4, 41, 1, 15.44);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (191, 5, 36, 1, 62.66);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (122, 4, 1, 10, 2.5);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (122, 5, 50, 1, 6.64);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (62, 4, 1, 1, 2.5);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (62, 4, 31, 1, 5.8);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (62, 4, 41, 1, 1.78);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (62, 5, 50, 1, 5.33);

Insert into ITEM_NF (NUM_NF, CD_GRUPO_ITEM, CD_ITEM, QTE_VENDA, VLR_UNITARIO)

values (62, 4, 33, 1, 14.03);

Depois de demonstrar como criaras tabelas e popular com dados utilizando SQL puro,

é chegada a hora de fazer exatamente a mesma coisa só que através do Oracle Data

Integrator.

Page 13: ODI Tutorial - Desenvolvendo Procedures

Criando um novo Projeto

A partir desse momento vamos ingressar no Oracle Data Integrator e criar os

procedimentos (Procedures) para a montagem do nosso ambiente de trabalho,

lembrando que devemos criar as tabelas dos ambientes de origem e destino, depois

dessa tarefa devemos criar outros procedimentos para popular essas tabelas.

Entre no ODI Designer : Start > Programs > Oracle > Oracle Data Integrator

> Designer, selecione OracleDI Tutorial Series Work Repository no Login Name

e em seguida entre com o usuário e senha, no post anterior criamos o usuário

DW_DBA, a senha é DW_DBA.

Após entrar no módulo Designer, clique no botão Insert Project . Neste ponto irá

ser mostrada a figura abaixo, preencha as informações conforme descrito.

OracleDI_Tutorial_Series no campo Name, veja que o campo Code foi preenchido

automaticamente.

Ao terminar o preenchimento do nome do projeto clique no botão OK.

Page 14: ODI Tutorial - Desenvolvendo Procedures

Após a criação do projeto, devemos ter essa visão, o próximo passo é renomear a

pasta chamada First Folder, nesta pasta se encontram todos os principais objetos em

um projeto de ETL, tais como Package (Pacotes), Interfaces (Interfaces de integração)

e Procedures (Procedimento). Vamos renomear esse diretório para Database

Creation e teremos essa visão.

Perceba, que para alterar o nome da pasta, deve-se clicar na pasta com o botão direito

do mouse e selecionar a opção editar, neste instante a janela ao lado será mostrada,

altere o valor do campo disponível para o conteúdo solicitado e clique em OK.

Page 15: ODI Tutorial - Desenvolvendo Procedures

Após essas primeiras configurações teremos esse resultado.

Page 16: ODI Tutorial - Desenvolvendo Procedures

Procedure ODI – Criar Tabelas

Vamos agora criar as Procedures no ODI para montagem das nossas estruturas de

tabelas e para preencher as tabelas originais.

1. Expanda a pasta Database Creation, e clique com o botão direito sobre

Procedures e selecione Insert Procedure.

2. Nomeie a Procedure como Create-Source-Tables. No parâmetro Target

Technology defina como Oracle, deixe o parâmetro Source Technology

como <Undefined>. Clique na pasta Details em seguida clique no ícone

para adicionar os passos na construção da Procedure.

Page 17: ODI Tutorial - Desenvolvendo Procedures

3. Vamos utilizar o campo Command pra montar o código a ser executado. No

nosso projeto iremos utilizar comandos SQL. Entre os parâmetros de acordo

com a tabela abaixo:

Parâmetro Valor

Name CR-TBL-TIPOCLIENTE

Technology Oracle

Context <Execution Context>

Schema LOGICAL_DW_ORIGEM

Command -- Tabela TIPO_CLIENTE

CREATE TABLE "TIPO_CLIENTE"

( "CD_TIPO_CLIENTE" NUMBER(*,0) NOT NULL ENABLE,

"DS_TIPO_CLIENTE" VARCHAR2(30),

PRIMARY KEY ("CD_TIPO_CLIENTE") ENABLE

)

É muito importante ressaltar que devemos trabalhar na pasta Command on

Target, pois estamos gerando códigos diretamente no local onde iremos criar

as tabelas, e não estamos tratando código fonte, mas é possível, criar

procedures através de arquivos texto utilizando os recursos do Command on

Source. Os requisitos são os mesmos as parametrizações também. Por este

motivo também selecionamos tecnologia apenas para o Target Tecnology.

Nota 1: como boas práticas recomendo deixar o parâmetro Context sempre

como <Execution Context> pois a Procedure pode ser facilmente utilizada em

qualquer um dos ambientes parametrizados para o projeto, seja

Desenvolvimento, Teste, Homologação e/ou Produção.

Nota 2: quando executamos um comando SQL no ODI, devemos tirar o

comando “;” para terminação de sentença e não há necessidade de identificar o

OWNER da tabela, no nosso casso “DW_ORIGEM” ou “LOGICAL_DW_ORIGEM”.

Na figura abaixo podemos ver como ficou o resultado final:

Page 18: ODI Tutorial - Desenvolvendo Procedures

4. Expanda a pasta das Procedures e clique com o botão direito sob a Procedure

Create-Source-Table em seguida clique em Execute.

Page 19: ODI Tutorial - Desenvolvendo Procedures

5. Agora abra o ODI Operator. No ODI Operator, click em All Executions, clique

em Refresh e procure a sua sessão, e verifique se a sua procedure foi

executada com sucesso.

6. Agora abra o Oracle SQL Developer e expanda a conexão DW_ORIGEM.

Selecione a pasta Tables e verifique se a sua tabela foi criada.

Page 20: ODI Tutorial - Desenvolvendo Procedures

7. Depois de validar a criação da Tabela TIPO_CLIENTE, repita os procedimentos

até criar todas as tabelas no ambiente.

Nota 3: ao executar o processo de criação pela primeira vez e a tabela é

criada, sempre que executar esse processo posteriormente irá ocorrer erro,

conforme mostrado na figura abaixo, pois a tabela já existe. Para tanto, sempre

que for recriar as tabelas as mesmas devem primeiro ser deletadas.

Page 21: ODI Tutorial - Desenvolvendo Procedures

Procedure ODI – Carregar Tabelas

Agora vamos criar as Procedures para carregar os dados nas tabelas, preencha os

parâmetros de acordo com a tabela abaixo:

Nota 4: Crie uma nova procedure somente para carregar os dados das tabelas.

Parâmetro Valor

Name CR-DATA-TIPOCLIENTE

Technology Oracle

Context <Execution Context>

Schema LOGICAL_DW_ORIGEM

Command -- DADOS PARA TABELA TIPO_CLIENTE begin

Insert into <%=odiRef.getSchemaName("D")%>."TIPO_CLIENTE"

(CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values (5,'COMERCIO');

Insert into <%=odiRef.getSchemaName("D")%>."TIPO_CLIENTE"

(CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values (6,'ARQUITETURA');

Insert into <%=odiRef.getSchemaName("D")%>."TIPO_CLIENTE"

(CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values (7,'INFORMATICA');

Insert into <%=odiRef.getSchemaName("D")%>."TIPO_CLIENTE"

(CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values (8,'INDUSTRIA');

Insert into <%=odiRef.getSchemaName("D")%>."TIPO_CLIENTE"

(CD_TIPO_CLIENTE,DS_TIPO_CLIENTE) values (10,'BANCO');

end;

Nota 5: Perceba que para o commando utilizado no ODI colocamos duas instruções

PL/SQL begin e end e também estou utilizando uma função de substituição para

montar o owner da tabela odiRef.getSchemaName("D")%>.

Page 22: ODI Tutorial - Desenvolvendo Procedures

Depois de montar a Procedure, execute e valide as informações através do ODI

Operator e Oracle SQL Developer.

Nota 6: repita o procedimento até carregar os dados de todas as tabelas. Lembre-se

que você poderá criar várias Procedures ou apenas uma com vários processos dentro

delas.