none
INSERIR DADOS DE RESULTADO DE PROCEDURE DO SQL EM TABELA DO ORACLE RRS feed

  • Pergunta

  • Bom dia pessoal!

    Tenho o seguinte cenário:

    1) Uma consulta em base Oracle que traz várias linhas em apenas duas coluna;

    2) O resultado dessa consulta, uso o Foreach Loop Container para executar uma procedure em uma base SQL Server;

    3) Preciso pegar esse resultado e inserir em uma tabela na Base Oracle.

    Fiz o seguinte:

    1) Configurei um Execute SQL Task para trazer o resultado da consulta em uma variável de objeto;

    2) Criei mais duas variáveis de tipo String para executar a procedure dentro do Foreach Loop Container em um Execute SQL Task também

    3) Tentei criar uma tabela temporária global antes do Foreach Loop Container e ao executar recebe os dados normalmente, só que, quando finaliza o pacote derruba a tabela temporária.

    Alguém tem alguma ideia de como posso fazer isso?

    Meu objetivo é inserir os dados da procedure em uma tabela no Oracle.

    Um abraço e obrigado antecipadamente

     

    quinta-feira, 28 de agosto de 2014 14:27

Respostas

  • Eu não usaria o  Integration Services para isso não, faria de forma mais simples....

    1. No servidor SQL Server crie um "linked Server" para o Oracle.

    2. Usando o "linked server" faça a consulta no Oracle e coloque em uma tabela temporária o resultado.

    3. Execute em loop a SP com os parâmetros da tabela temporária colocando o resultado em outra temporária.

    4, Atualize a tabela no Oracle usando o "linked server"

    Obs. Para adicionar o resultado da SP em uma tabela temporaria, segue o link: http://www.tuliorosa.com.br/index.php/archives/204



    Tulio Rosa | http://tuliorosa.com.br

    sexta-feira, 29 de agosto de 2014 18:30

Todas as Respostas

  • Cristian,

    Acredito que utilizar uma tabela temporária, mesmo que global não seja a melhor solução.

    Já pensou em deixar uma tabela específica no banco somente para este finalidade? E sempre que rodar o pacote realizar o Truncate nela!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 29 de agosto de 2014 18:15
    Moderador
  • Eu não usaria o  Integration Services para isso não, faria de forma mais simples....

    1. No servidor SQL Server crie um "linked Server" para o Oracle.

    2. Usando o "linked server" faça a consulta no Oracle e coloque em uma tabela temporária o resultado.

    3. Execute em loop a SP com os parâmetros da tabela temporária colocando o resultado em outra temporária.

    4, Atualize a tabela no Oracle usando o "linked server"

    Obs. Para adicionar o resultado da SP em uma tabela temporaria, segue o link: http://www.tuliorosa.com.br/index.php/archives/204



    Tulio Rosa | http://tuliorosa.com.br

    sexta-feira, 29 de agosto de 2014 18:30
  • Cristian,

    Exatamente o que você precisa executar nesta procedure no SQL Server? Você não poderia transformar o conteúdo deste procedure para uma function escalar e assim eliminar o seu "Foreach Loop" ?

    Também concordo com a idéia do Junior, criar uma tabela específica para esta finalidade, com os índices adequados, pode melhorar a performance de sua execução. É importante também indicar na sua consulta onde está a sua tabela (banco e schema), isso pode evitar erros. Segue abaixo um exemplo:

    SELECT CD_PESSOA, NM_PESSOA FROM SeuBanco.dbo.TB_PESSOA;
    GO

    Para maiores informações sobre a Function veja:

    http://technet.microsoft.com/pt-br/library/ms177499(v=sql.105).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 1 de setembro de 2014 13:20
    Moderador
  • Eu não usaria o  Integration Services para isso não, faria de forma mais simples....

    1. No servidor SQL Server crie um "linked Server" para o Oracle.

    2. Usando o "linked server" faça a consulta no Oracle e coloque em uma tabela temporária o resultado.

    3. Execute em loop a SP com os parâmetros da tabela temporária colocando o resultado em outra temporária.

    4, Atualize a tabela no Oracle usando o "linked server"

    Obs. Para adicionar o resultado da SP em uma tabela temporaria, segue o link: http://www.tuliorosa.com.br/index.php/archives/204



    Tulio Rosa | http://tuliorosa.com.br

    Tulio,

    Gostei da sua sugestão, só um detalhe, dependendo do tamanho da Query e forma de execução por exemplo através do OpenQuery, temos limitações da quantidade de caracteres declarados no código fonte da query. NO Openquery podemos ter até 8.000 caracteres de código fonte, o que em alguns cenários pode acabar virando uma limitação.

    Mas vamos a pena analisar e testar.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 5 de setembro de 2014 13:31
    Moderador