terça-feira, 23 de julho de 2013

Executar através do SQL Server Procedures do Oracle que possuem parâmetros de saída

Olá Galera, hoje vou demonstrar como executar através do SQL Server  procedures do Oracle que possuem parâmetros de saída, para ilustrar o funcionamento, vou pegar os valores que retornarem na procedure do Oracle e inserir em uma tabela dentro do SQL Server.

Ilustrando a necessidade: Tenho um Sistema de Informação rodando em Banco de Dados Oracle que possui todas as informações de Agendamentos de Consultas de Pacientes. Porem preciso cruzar essas informações com outro sistema rodando em SQL Server.

Para isso, no Banco de Dados Oracle foi disponibilizado uma Package que possui a procedure Proxima_Agenda_Paciente, que é composta por um parâmetro de entrada(in) que seria o ID do paciente e 3 parâmetro de Saida(out),  que seria a  data da próxima consulta do paciente, classificação da agenda e especialidade da agenda.

Essa procedure deve ser executada utilizando Linked Server, para isso o mesmo deve estar configurado no SQL Server. Como configurar Linked Server

Para demonstrar a procedure funcionando, criei a tabela abaixo que receberá os valores retornado na procedure do banco de dados Oracle:




Abaixo o código utilizado para executar a procedure e alimentar a tabela.

1º) Populei um cursor com os IDs de pacientes para que eu possa passar como parâmetro de entrada na Procedure.

2º) Após, fui executando a procedure com cada ID de Paciente do cursor e inserindo os valores retornados pela procedure do Oracle na tabela Proxima_Agenda_Paciente, no SQL Server.

Código:
Declare
Cursor01 Cursor For
Select Rghc From Openquery(Tasyhom, 'Select Pf.Nr_Prontuario||Pf.Nr_Pront_Dv Rghc
                                                                   From Pessoa_Fisica Pf
                                                                       Inner Join Agenda_Consulta Ac
                                                                          On Pf.Cd_Pessoa_Fisica = Ac.Cd_Pessoa_Fisica
                                                                    Where
                                                                           Dt_Agenda > Sysdate
                                                                    And Rownum < 200');
Declare
@Rghc Varchar(10),
@W_Data Varchar(200),
@W_Classificacao Varchar(40),
@W_Especialidade Varchar(100);

Begin
   Open Cursor01
       Fetch Next From Cursor01 Into @Rghc
   While @@Fetch_Status = 0
       Begin
           Set @W_Data = ''
           Set @W_Classificacao = ''
           Set @W_Especialidade = ''
           Execute ( 'begin tasy.Pkg_Dados_Tasy_Icesp.Proxima_Agenda_Paciente(?,?,?,?); end;',
@Rghc, @W_Data Output, @W_Classificacao Output, @W_Especialidade Output) At Tasy;

Insert Into Proxima_Agenda_Paciente(Rghc, Data, Classificacao, Especialidade )
 Values(@Rghc, @W_Data,@W_Classificacao, @W_Especialidade )      

           Fetch Next From Cursor01 Into @Rghc;
       End;
Deallocate Cursor01;
End;


Consultando a Tabela no SQL Server:

Obrigado!!

2 comentários: