Usuário com melhor resposta
INSERIR DADOS DE RESULTADO DE PROCEDURE DO SQL EM TABELA DO ORACLE

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
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
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 5 de setembro de 2014 13:29
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
-
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
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 5 de setembro de 2014 13:29
-
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 RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
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