SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
March 3




                                 2012
ODI
Tutorial
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   Desenvolvimento
para integrar dados de diferentes origens (bancos de
dados diferentes e arquivos texto) para uma base de
                                                          de Procedures
destino Oracle.
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.
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.
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 ) ;
-- 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     ) ;
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    ) ;
-- 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       ) ;
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);
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í');
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);
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);
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.
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.
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.
Após essas primeiras configurações teremos esse resultado.
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.
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:
4. Expanda a pasta das Procedures e clique com o botão direito sob a Procedure
   Create-Source-Table em seguida clique em Execute.
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.
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.
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")%>.
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.

Mais conteúdo relacionado

Mais procurados

Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDBMongoDB
 
All about Context API
All about Context APIAll about Context API
All about Context APISouvik Basu
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Odoo
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB Habilelabs
 
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaBuilding a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaMushfekur Rahman
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsSpringPeople
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBNodeXperts
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.jsRob O'Doherty
 
Zabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaqueLuciano Ramalho
 
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...MinhLeNguyenAnh2
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
 
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.eu
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.euDatabase migration from Sybase ASE to PostgreSQL @2013.pgconf.eu
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.eualdaschwede80
 

Mais procurados (20)

Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDB
 
All about Context API
All about Context APIAll about Context API
All about Context API
 
Extensible Data Modeling
Extensible Data ModelingExtensible Data Modeling
Extensible Data Modeling
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB
 
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaBuilding a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Zabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshopZabbix Smart problem detection - FISL 2015 workshop
Zabbix Smart problem detection - FISL 2015 workshop
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Colecciones en Scala
Colecciones en ScalaColecciones en Scala
Colecciones en Scala
 
Colecciones en Python
Colecciones en PythonColecciones en Python
Colecciones en Python
 
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
PostgreSQL_ Up and Running_ A Practical Guide to the Advanced Open Source Dat...
 
Laravel Introduction
Laravel IntroductionLaravel Introduction
Laravel Introduction
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.eu
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.euDatabase migration from Sybase ASE to PostgreSQL @2013.pgconf.eu
Database migration from Sybase ASE to PostgreSQL @2013.pgconf.eu
 

Destaque

Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - BackupCaio Lima
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo TextoCaio Lima
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasCaio Lima
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalhoCaio Lima
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasCaio Lima
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaCaio Lima
 
ODI SERIES - Como mapear novos campos em modelos e interfaces
ODI SERIES - Como mapear novos campos em modelos e interfacesODI SERIES - Como mapear novos campos em modelos e interfaces
ODI SERIES - Como mapear novos campos em modelos e interfacesCaio Lima
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosCaio Lima
 
ESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in EssbaseESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in EssbaseCaio Lima
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - TreinamentoCaio Lima
 
Odi tutorial glossário e termos técnicos
Odi tutorial   glossário e termos técnicosOdi tutorial   glossário e termos técnicos
Odi tutorial glossário e termos técnicosCaio Lima
 

Destaque (11)

Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - Backup
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo Texto
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para Entrevistas
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalho
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores Práticas
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração Topologia
 
ODI SERIES - Como mapear novos campos em modelos e interfaces
ODI SERIES - Como mapear novos campos em modelos e interfacesODI SERIES - Como mapear novos campos em modelos e interfaces
ODI SERIES - Como mapear novos campos em modelos e interfaces
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de Dados
 
ESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in EssbaseESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in Essbase
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - Treinamento
 
Odi tutorial glossário e termos técnicos
Odi tutorial   glossário e termos técnicosOdi tutorial   glossário e termos técnicos
Odi tutorial glossário e termos técnicos
 

Semelhante a ODI Tutorial - Desenvolvendo Procedures

Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoAdilson Nascimento
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4Ed W. Jr
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateJuliano Oliveira
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicosponto hacker
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
SICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoSICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoRenzo Petri
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de AndroidSuelen Carvalho
 

Semelhante a ODI Tutorial - Desenvolvendo Procedures (20)

Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupo
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicos
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
SICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoSICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle Jurídico
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de Android
 

ODI Tutorial - Desenvolvendo Procedures

  • 1. March 3 2012 ODI Tutorial 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 Desenvolvimento para integrar dados de diferentes origens (bancos de dados diferentes e arquivos texto) para uma base de de Procedures destino Oracle.
  • 2. 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.
  • 3. 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.
  • 4. 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 ) ;
  • 5. -- 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 ) ;
  • 6. 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 ) ;
  • 7. -- 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 ) ;
  • 8. 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);
  • 9. 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í');
  • 10. 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);
  • 11. 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);
  • 12. 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.
  • 13. 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.
  • 14. 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.
  • 15. Após essas primeiras configurações teremos esse resultado.
  • 16. 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.
  • 17. 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:
  • 18. 4. Expanda a pasta das Procedures e clique com o botão direito sob a Procedure Create-Source-Table em seguida clique em Execute.
  • 19. 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.
  • 20. 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.
  • 21. 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")%>.
  • 22. 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.