Tenho uma dúvida relacionado a linked server no sql server. Como faço para executar procedures/functions com parâmetros vindas do Oracle no sql server? E como diferenciar input e output dos parametros dessas procedures na execução?
Tenho uma dúvida relacionado a linked server no sql server. Como faço para executar procedures/functions com parâmetros vindas do Oracle no sql server? E como diferenciar input e output dos parametros dessas procedures na execução?
No caso as procedures/functions vão estar no SQL Server mas os parâmetros serão coletados do Oracle, é isso?
Você pode criar um script que roda no SQL Server e, via um linked server com o Oracle (SQLServer > Oracle), obter os parâmetros e finalmente rodar as procedures.
Agora, se você quer rodar procedures existentes no Oracle e coletar o resultado da execução, acho que a sintaxe final vai depender de como as procedures foram criadas.
Aqui tem um exemplo pra coletar o resultado da procedure:
declare @result varchar(255);
exec ('BEGIN
?:= your_SP_Name(''arg1'', ''arg2'', etc);
END;
',@result OUTPUT) at your_LinkedServerName;
select @result;
E aqui um exemplo caso o resultado é um dos parâmetros:
DECLARE @outputParameter int;
EXEC ('BEGIN <procedureName>(?,?); END;', @inputParameter , @outputParameter OUTPUT) at <linkedServerName>;
Bom dia Robson,
Seria uma procedure presente no Oracle, o parâmetro necessário nessa procedure eu colocaria do lado do SQL para retornar as informações dessa procedure do oracle. O parâmetro necessário seria um sys_refcursor como output. A dúvida é como crio essa variavel de sys_refcursor do lado do sql para conseguir chamar essa procedure do oracle? Já tentei colocar como DECLARE @outputParameter cursor, mas aparece o seguinte erro abaixo.
"the variable is a cursor variable but it is used in a place where a cursor variable is not valid"
Vou precisar desse cursor no sql para realizar certas operações.
Obrigado.
Eu não tenho tanto conhecimento do Oracle mas acho que esse tipo sys_refcursor
é algo exclusivo dele, então a provável solução vai ser reescrever essa procedure no SQL Server msm. Dá uma olhada nesse artigo aqui, parece que é algo semelhante ao teu problema.
Obrigado Robson pela ajuda, vou tentar verificar se apresenta essa variável relacionado ao que existe no Oracle, mas já pensando em ter que reescrever ou ajustar esse ponto em uma outra forma.