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

Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Leinylson Fontinele
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticosCentro Paula Souza
 
Sql – Structured Query Language
Sql – Structured Query LanguageSql – Structured Query Language
Sql – Structured Query Languagepandey3045_bit
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Structured query language(sql)ppt
Structured query language(sql)pptStructured query language(sql)ppt
Structured query language(sql)pptGowarthini
 
Basic Sql Handouts
Basic Sql HandoutsBasic Sql Handouts
Basic Sql Handoutsjhe04
 
SQL Queries
SQL QueriesSQL Queries
SQL QueriesNilt1234
 
Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - BásicoAirton Zanon
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de RepetiçãoProfessor Samuel Ribeiro
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggersrehaniltifat
 

Mais procurados (20)

Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Aula 2 - Comandos DDL DML DQL E DCL
Aula 2 - Comandos DDL DML DQL E DCLAula 2 - Comandos DDL DML DQL E DCL
Aula 2 - Comandos DDL DML DQL E DCL
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Sql – Structured Query Language
Sql – Structured Query LanguageSql – Structured Query Language
Sql – Structured Query Language
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Structured query language(sql)ppt
Structured query language(sql)pptStructured query language(sql)ppt
Structured query language(sql)ppt
 
SQL
SQLSQL
SQL
 
Introduction to-sql
Introduction to-sqlIntroduction to-sql
Introduction to-sql
 
Basic Sql Handouts
Basic Sql HandoutsBasic Sql Handouts
Basic Sql Handouts
 
Objeto sqlcommand
Objeto sqlcommandObjeto sqlcommand
Objeto sqlcommand
 
SQL JOINS
SQL JOINSSQL JOINS
SQL JOINS
 
SQL Queries
SQL QueriesSQL Queries
SQL Queries
 
Aula de SQL - Básico
Aula de SQL - BásicoAula de SQL - Básico
Aula de SQL - Básico
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggers
 
A Estrutura da Linguagem SQL
A Estrutura da Linguagem SQLA Estrutura da Linguagem SQL
A Estrutura da Linguagem SQL
 

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 SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasCaio 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
 
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 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 (7)

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 SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores Práticas
 
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
 
ESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in EssbaseESSBASE Series - Excel Add-in Essbase
ESSBASE Series - Excel Add-in Essbase
 
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
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de Android
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 

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.