Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

executou um procedimento armazenado oracle do servidor sql usando a função de consulta aberta


Finalmente rastreei algumas soluções - a chave para o problema (para nós) é que, por padrão, os RPCs são desabilitados para servidores vinculados. Os parâmetros para Rpc, Rpc Out e Use Remote Collation precisam ser definidos como true. Mais informações:

http://blog.sqlauthority.com/2007/10/18/sql-server-2005-fix-error-msg-7411-level-16-state- 1-server-is-not-configured-for-rpc/

A solução que você usar dependerá dos requisitos de saída do procedimento. O primeiro exemplo retorna um valor de saída. No segundo exemplo, nenhum valor de saída é retornado (os dados são coletados em uma consulta subsequente).

Exemplo 1

O procedimento T2T_collect_all possui dois parâmetros de entrada (datas de início e término) e um parâmetro de saída (contagem de linhas).

DECLARE @l_i_parameter1 varchar(10)

DECLARE @l_i_parameter2 varchar(10)

DECLARE @l_i_parameter3 varchar(10)

DECLARE @l_i_parameter4 varchar(10)

DECLARE @l_o_parameter1 inteiro

SET @l_i_parameter1 ='2009/10/01'

SET @l_i_parameter2 ='aaaa/mm/dd'

SET @l_i_parameter3 ='2009/12/31'

SET @l_i_parameter4 ='aaaa/mm/dd'

SET @l_o_parameter1 =0

EXECUTE ( 'começo T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;',
      @l_i_parameter1, 

      @l_i_parameter2,

      @l_i_parameter3, 

      @l_i_parameter4,

      @l_o_parameter1 OUTPUT

) EM ORA_DB;

Mais informações:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx

Exemplo 2a

O procedimento T2T_collect_allx possui apenas dois parâmetros de entrada (datas inicial e final).

EXECUTE ('início T2T_collect_allx (SYSDATE - 40, SYSDATE); fim;') ORA_DB;

Exemplo 2b

SELECT * FROM OPENQUERY(ORA_DB, 'início T2T_collect_allx (SYSDATE - 40, SYSDATE ); fim;')