Oracle
 sql >> Datenbank >  >> RDS >> Oracle

führte eine gespeicherte Oracle-Prozedur vom SQL-Server unter Verwendung der offenen Abfragefunktion aus

Endlich ein paar Lösungen aufgespürt – der Schlüssel zum Problem (für uns) ist, dass standardmäßig RPCs für Verbindungsserver deaktiviert sind. Die Parameter für Rpc, Rpc Out und Use Remote Collation müssen auf true gesetzt werden. Weitere Informationen:

http://blog.sqlauthority.com/2007/10/18/sql-server-2005-fix-error-msg-7411-level-16-state- 1-Server-ist-nicht-für-rpc-konfiguriert/

Welche Lösung Sie verwenden, hängt von den Ausgangsanforderungen des Verfahrens ab. Das erste Beispiel gibt einen Ausgabewert zurück. Beim zweiten Beispiel werden keine Ausgabewerte zurückgegeben (Daten werden in einer nachfolgenden Abfrage gesammelt).

Beispiel 1

Die Prozedur T2T_collect_all hat zwei Eingabeparameter (Start- und Enddatum) und einen Ausgabeparameter (Zeilenanzahl).

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 ganze Zahl

SET @l_i_parameter1 ='2009/10/01'

SET @l_i_parameter2 ='JJJJ/MM/TT'

SET @l_i_parameter3 ='2009/12/31'

SET @l_i_parameter4 ='JJJJ/MM/TT'

SET @l_o_parameter1 =0

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

      @l_i_parameter1, 

      @l_i_parameter2,

      @l_i_parameter3, 

      @l_i_parameter4,

      @l_o_parameter1 OUTPUT

) BEI ORA_DB;

Weitere Informationen:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx

Beispiel 2a

Die Prozedur T2T_collect_allx hat nur zwei Eingabeparameter (Start- und Enddatum).

EXECUTE ('begin T2T_collect_allx (SYSDATE - 40, SYSDATE); end;') ORA_DB;

Beispiel 2b

SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')