2016-12-10 1 views
0

Ich möchte Ergebnisse von der Orakel-Prozedur erhalten, die den Cursor von SQL Server zurückgeben, also welche Art von Ausgabeparameter muss verwendet werden, danke?Welche Art von Ausgabeparameter von Ergebnis Oracle-Paketprozeduren, die Ref-Cursor über SQL Server zurückgeben verknüpft?

DECLARE @InputPara NVARCHAR(MAX) 
DECLARE @OutputPara ????????? 

EXECUTE ('BEGIN ? := Package.MyFunction(?,?); END;', @InputPara, @OutputPara OUTPUT) AT linked 
+0

Welcher Datentyp wird von 'Package.MyFunction (?,?)'? – FDavidov

+0

was ist Datentyp ich muss für @OutputPara – JimmyN

+0

setzen Siehe meine Antwort unten (in wenigen Minuten). – FDavidov

Antwort

0

Zu allererst und da, was Sie den Aufruf einer Funktion, die Wert zurückgibt, ich bin nicht sicher, dass Sie einen anonymen Block benötigen (dh BEGIN/END) und Sie können einfach die Funktion mit dem Parameter Empfangs aufrufen der von der Funktion zurückgegebene Wert (wie Sie es getan haben) und fügen Sie (wenn die Sprache es erlaubt) die Klausel INTO hinzu.

Zweitens ist die Reihenfolge der Parameter übergeben wird (dh @InputPara, @OutputPara) muss die Reihenfolge der ? übereinstimmen, dass die Aussage sollte in Ihrem Fall bedeutet sein (Ihre Syntax, nicht die, die ich verwende ich vorgeschlagen):

EXECUTE ('BEGIN ? := Package.MyFunction(?,?); END;', 
     @OutputPara OUTPUT      , 
     @InputPara_1        , 
     @InputPara_2        ) AT linked ; 

[Beachten sie, dass zwei Parameter an die Funktion übergeben wird ((?,?)).]

was Ihre Frage (Art der @OutputPara) sollte es die gleiche Art von der Funktion zurückgegeben werden wird (was aus Deine Frage kann ich nicht beurteilen).

+0

Die Funktion gibt einen Cursor zurück, also welche Art von @OutputPara muss ich einstellen? – JimmyN

+0

In diesem Fall müssen Sie das Rückgabeobjekt "Objekt" als Cursor behandeln. Es hängt von Ihrem DBMS ab und ruft die Oracle-Funktion auf. Überprüfen Sie das Web, wie zurückgegebene Cursor in dem bestimmten DBMS behandelt werden, von dem Sie die Funktion aufrufen (nicht Oracle, sondern das DBMS, von dem aus Sie aufgerufen werden). – FDavidov

Verwandte Themen