2016-07-25 26 views
0

Über eine ODBC-Datenbankverbindung von Oracle (11g) zu MS-SQL Server (2012) versuchen wir eine Funktion/Prozedur aufzurufen, die eine ganze Zahl zurückgibt. Die SQL-Server-Prozedur heißt spProcTest2 mit 2 Parametern. Diese Prozedur gibt eine Ganzzahl zurück, die als Fehlercode verwendet wird. Ein Beispiel für den Code finden Sie unten.Rufen Sie die SQL-Serverfunktion von Oracle auf und erhalten Sie den Ergebniswert

Die Frage ist, wie man den Wert erhält, der von der Prozedur zurückgegeben wird?

HINWEIS: Der Wert 'nr', der im folgenden Code verwendet wird, gibt nur die Anzahl der betroffenen Zeilen zurück.

declare 
    c  INTEGER; 
    nr  INTEGER; 
    v_sql VARCHAR2(1000); 
    SOUT  VARCHAR2(100); 
BEGIN 
    v_sql :='EXEC dbo.spProcTest2 ?, ?;'; 

    c := [email protected]; 

    [email protected](c, v_sql); 

    [email protected] (c, 1 , 1); 
    [email protected] (c, 2 , 5); 

    nr := [email protected](c); 

    DBMS_OUTPUT.PUT_LINE('nr=' || nr) ;  

    [email protected](c); 

    commit; 
END; 

Antwort

0
v_sql :='declare @resxml xml exec dbo.TestProcedure 2, @resxml output select cast(@resxml as varchar(8000)) as vres'; 
  1. declare @resxml xml
  2. exec dbo.TestProcedure 2, @resxml Ausgabe
  3. wählen Guss (@resxml als varchar (8000)) als vres (Rechnen Sie XML in VARCHAR)

Alle proc

 


CREATE OR REPLACE PROCEDURE CALLSQLPROC(
v_out out varchar2, 
v_res out integer) 
IS 
    c    INTEGER; 
    v_sql   VARCHAR2(32767); 

BEGIN 

    v_sql :='declare @resxml xml exec dbo.TestProcedure 2, @resxml output select cast(@resxml as varchar(8000)) as vres'; 

    c := [email protected]_LIFE; 

    [email protected]_LIFE(c, v_sql); 

    [email protected]_LIFE(c,1, v_out); 

    v_res := [email protected]_LIFE(c); 

    [email protected]_LIFE(c,1,v_out); 

    [email protected]_LIFE(c); 
END;