none
Inserção no Oracle com Sequence RRS feed

  • Pergunta

  • Pessoal,

    Preciso inserir no Oracle através do SSIS numa tabela que utiliza sequence, não gostaria de fazer o insert diretamente com um componente SQL Task, gostaria de utilizar um Data Flow, sabem se tem  como  e como posso proceder?

    terça-feira, 6 de outubro de 2009 22:53

Respostas

  • Amigos,

    Consegui resolver o problema.

    Utilizei 3 variáveis e um For Loop Container 

    Uma das variáveis define o número de registros a serem inseridos (Select Count na tabela de origem), fora do Loop

    Dentro do loop faço um select no oracle pra trazer a o numero de incremento a ser inserido( Select nomesequence.nexval)

    Ainda no Loop insiro linha a linha até que o numero de registros da primeira variavel , e a cada interação do loop pega uma sequence
    nova no oracle 

    Sendo assim consigo inserir no oracle utlizando a sequence criada no mesmo.

    Obrigao Junior, espero que eu tenha sido claro no procedimento que adotei.

    Abraços.

    Valério

    sábado, 10 de outubro de 2009 15:13

Todas as Respostas

  • Valério,

    Através do Dataflow, você deverá utilizar os componentes OLEDB Source e OLEDB Destination.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 7 de outubro de 2009 01:01
    Moderador
  •  Prezado Junior blz amigo,

     Seguinte no OleDB Source tem uma tabela conectada ao SQL Server e no OLEDB Destination vou ter uma tabela do Oracle o qual um dos campos utiliza uma sequence pra ser inserido, ou seja se eu fosse fazer o insert eu teria que passar o nome da sequence.nextval, como pegar o proximo seqüencial da tabela com nextval via OLEDB destination

    Att,

    Valério 
    quarta-feira, 7 de outubro de 2009 13:38
  • Prezados,

    Será que alguém tem idéia de como resolver essa questão? fui claro na minha dúvida? preciso inserir dados numa tabela do Oracle via OLEDB destination utilizando uma sequence via nextval numa coluna dessa tabela do oracle.
    quinta-feira, 8 de outubro de 2009 12:53
  • Valério,

    Acredito ter entendi!!!

    Você quer fazer o insert e continuar utilizando a autonumeração que o Oracle esta gerando?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 8 de outubro de 2009 14:00
    Moderador
  • Exatamente,

    Preciso carregar uma tabela de Origem SQL Server (OLE DB Source) para a tabela de destino Oracle(OLEDB Destination) e utilizar a autonumeração da coluna da tabela do oracle que é feita via sequence.

    Desde já agredeço.

    Att,

    Valério
    quinta-feira, 8 de outubro de 2009 16:59
  • Valério,

    Então o que você poderia fazer é configurar o seu pacote SSIS, mas omitir no componente OLEDB Destination a coluna que esta sendo utilizada para autonumeração, com isso quando o dado for inserido o Oracle faz a autonumeração.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 8 de outubro de 2009 19:49
    Moderador
  • Fala Juniro blz,

    Seguinte o procedimento que você descreveu não ocorre pois o oracle não possui autoincremento  como ocorre com o identiy no SQL Server.

    Para isso vc deve chamar a sequence e dar o comando nextval, como não vou usar o comando insert não sei como chamar esse comando para cada linha inserida através do OLEDB Destination

    Att,

    Valério
    sexta-feira, 9 de outubro de 2009 15:43
  • Amigos,

    Consegui resolver o problema.

    Utilizei 3 variáveis e um For Loop Container 

    Uma das variáveis define o número de registros a serem inseridos (Select Count na tabela de origem), fora do Loop

    Dentro do loop faço um select no oracle pra trazer a o numero de incremento a ser inserido( Select nomesequence.nexval)

    Ainda no Loop insiro linha a linha até que o numero de registros da primeira variavel , e a cada interação do loop pega uma sequence
    nova no oracle 

    Sendo assim consigo inserir no oracle utlizando a sequence criada no mesmo.

    Obrigao Junior, espero que eu tenha sido claro no procedimento que adotei.

    Abraços.

    Valério

    sábado, 10 de outubro de 2009 15:13
  • Valério,

    Obrigado pelo retorno, com certeza os procedimentos que você utilizou estão de acordo com a sua necessidade.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 10 de outubro de 2009 20:07
    Moderador
  • Valério apenas para registro, já passei por uma situação parecida e resolvi ela criando uma trigger de insert no oracle.

    Abaixo ex. trigger de inserção:

    create trigger auto_trigger
    before insert on teste
    for each row
    begin
    select test_seq.nextval into :new.id from dual;
    end;

    Att. Leandro Hexsel Bugalho
    segunda-feira, 12 de outubro de 2009 15:20
  • Leandro,

    Isso era uma das hipóteses que pensei também caso não conseguisse,  muito obrigado mais uma vez.

    Att,,

    Valério Pereira
    terça-feira, 13 de outubro de 2009 12:19