2015-06-12 6 views
5

Im Ausführung versuchen, eine Oracle gespeicherte Prozedur von SQL Server 2008 R8 Trog DB LINK auszuführen, der Header der gespeicherten Prozedur ist wie folgt:ein Orakel gespeicherte Prozedur von SQL Server 2008

PROCEDURE TEST (X OUT NOCOPY VARCHAR2, Y OUT NOCOPY NUMBER, Z IN NUMBER)

Dieses Verfahren werden soll

Meine T-SQL-Ergebnis wird eine Tabelle „MYTABLE“ und zurück aktualisieren ist:

  DECLARE @X nvarchar(255)    
      DECLARE @Y INTEGER 
      DECLARE @Z INTEGER 


      SET @X= '' 
      SET @Y = 0 
      SET @Z = 2 

      EXEC('begin USER.PKG.TEST(?,?,?); end;',@X OUTPUT, @Y OUTPUT,@Z) AT DB_ORACLE; 

Die gespeicherte Prozedur ausgeführt wird, weil ich, dass die Tabelle „MYTABLE“ sehen kann, wird aktualisiert, aber das Problem dass im erhält einen Fehler:

Msg 7215, Niveau 17, État 1, Ligne 10 
Impossible d'exécuter l'instruction sur le serveur distant 'DB_ORACLE'. 

das in

Cannot execute the instruction at the distant server 'DB_ORACLE' 

NB übersetzen: Die Parameter für Rpc, Rpc Out und Use Remote Sortierungs

aktiviert

Vielen Dank für HELP

+0

Es ist wahrscheinlich Ein paar moderne Methoden, also verzeih mir, dass ich diese Leute frage, aber kann dies mit einem INSERT INTO RemTble @ DBlink VALUES ('gespeicherter Proc-Aufruf') geschehen, dann bei Rigger auf der Remote-Tabelle EXECUTEd den gespeicherten Proc-Aufruf, die Ergebnisse in einer anderen Tabelle zurückgeben/UPDATE remTble, arbeiten? Ich bin mir sicher, dass ich schon mal irgendwo gesehen habe. – TenG

+0

Danke für die Antwort, aber das Problem, ich kann nicht die gespeicherte Prozedur bearbeiten oder einen Trigger zu dieser Tabelle hinzufügen, weil ich nicht die Kontrolle über die Oracle-Datenbank/Tabellen haben. Sie müssen dies als einen Webservice konsumieren sehen, wenn Sie der Kunde sind, können Sie den Webservice nicht bearbeiten. – aminedev

Antwort

0

für einen einfachen Oracle Prozeduraufruf von SQL Server

exec ('beginnen sproc_name; Ende; ') bei linked_server_name

Aufruf Prozedur mit Variablen

<B>declare @z int<B> 
<B>set @z = 10 <B> 
exec ('begin sproc_name(''' + @z + '''); end;') at 
linked_server_name; 

Dies funktioniert gut für mich Verwendung

+0

Danke für die Antwort, aber die Lösung hat nicht für mich funktioniert, ich habe eine zusätzliche Fehlermeldung: PLS-00363: Ausdruck '' ne Peut être utilisee come cable d'affectation ORA-06550: Ligne 1, colonne 53: PLS-00363: ausdruck '0' ne peut être utilisee come cable d'affectiation ORA-06550: Ligne 1, colonne 7: PL/SQL: Anweisung ignoriert ". Msg 7215, Niveau 17, État 1 , Ligne 11 Impossible d'exécuter l'instruction sur le servéur distant 'DB_ORACLE'. – aminedev

+0

können Sie es übersetzen? –

+0

Der OLE DB-Provider "OraOLEDB.Oracle "" DB_ORACLE "verknüpfter Server hat die Nachricht" ORA-06550: Zeile 1, Spalte 50: PLS-00363: Ausdruck "" kann nicht als Zuweisungsziel ORA-06550: Zeile 1, Spalte 53: PLS-00363: Ausdruck '0' kann nicht als Zuweisungsziel verwendet werden ORA-06550: Zeile 1, Spalte 7: PL/SQL: Anweisung ignoriert ". Msg 7215, Ebene 17, Status 1, Zeile 10 Die Anweisung auf dem Remote-Server 'DB_ORACLE' kann nicht ausgeführt werden. Ich denke, das Problem ist die OUTPUT-Parameter – aminedev

0

Passing Ausgangsvariablen durch Ergebnismenge funktionieren sollte:

DECLARE @X nvarchar(255) = ''; 
DECLARE @Y int = 0; 
DECLARE @Z int = 2; 

DECLARE @Result As Table (X nvarchar(255), Y int); 

INSERT INTO @Result (X, Y) 
    EXEC('declare X nvarchar(255) = ?; Y int = ?; Z int = ?; begin USER.PKG.TEST(X, Y, Z); select X, Y from DUAL; end;', @X, @Y, @Z) AT DB_ORACLE; 

SELECT @X = X, @Y = Y FROM @Result; 
Verwandte Themen