sql >> Base de Datos >  >> RDS >> Oracle

ejecutó un procedimiento almacenado de Oracle desde el servidor sql usando la función de consulta abierta

Finalmente localicé algunas soluciones:la clave del problema (para nosotros) es que, de forma predeterminada, los RPC están deshabilitados para los servidores vinculados. Los parámetros para Rpc, Rpc Out y Use Remote Collation deben establecerse en verdadero. Más información:

http://blog.sqlauthority.com/2007/10/18/sql-server-2005-fix-error-msg-7411-level-16-state- 1-servidor-no-está-configurado-para-rpc/

La solución que utilice dependerá de los requisitos de salida del procedimiento. El primer ejemplo devuelve un valor de salida. El segundo ejemplo no devuelve valores de salida (los datos se recopilan en una consulta posterior).

Ejemplo 1

El procedimiento T2T_collect_all tiene dos parámetros de entrada (fechas de inicio y finalización) y un parámetro de salida (recuento de filas).

DECLARAR @l_i_parameter1 varchar(10)

DECLARAR @l_i_parameter2 varchar(10)

DECLARAR @l_i_parameter3 varchar(10)

DECLARAR @l_i_parameter4 varchar(10)

DECLARAR @l_o_parameter1 entero

SET @l_i_parameter1 ='2009/10/01'

SET @l_i_parameter2 ='aaaa/mm/dd'

ESTABLECER @l_i_parameter3 ='2009/12/31'

SET @l_i_parameter4 ='aaaa/mm/dd'

ESTABLECER @l_o_parameter1 =0

EXECUTE ('comenzar T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;', ​​

      @l_i_parameter1, 

      @l_i_parameter2,

      @l_i_parameter3, 

      @l_i_parameter4,

      @l_o_parameter1 OUTPUT

) EN ORA_DB;

Más información:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx

Ejemplo 2a

El procedimiento T2T_collect_allx tiene solo dos parámetros de entrada (fechas de inicio y fin).

EJECUTAR ('comenzar T2T_collect_allx (SYSDATE - 40, SYSDATE); fin;') ORA_DB;

Ejemplo 2b

SELECCIONE * DESDE OPENQUERY(ORA_DB, 'comienza T2T_collect_allx (SYSDATE - 40, SYSDATE); fin;')