2016-07-25 35 views
0

Oracle(11g)からMS-SQL Server(2012)へのODBCデータベース・リンクを使用して、整数を戻す関数/プロシージャをコールしようとします。 SQL Serverプロシージャの名前はspProcTest2で、パラメータは2つです。このプロシージャは、エラーコードとして使用される整数を戻します。 コードの例については、下記を参照してください。OracleからSQL Server関数を呼び出して結果値を取得

問題は、手順によって返される値を受け取る方法ですか?

注:以下のコードで使用されている値 'nr'は、影響を受ける行の数だけを返します。

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; 

答えて

0
v_sql :='declare @resxml xml exec dbo.TestProcedure 2, @resxml output select cast(@resxml as varchar(8000)) as vres'; 
  1. 宣言@resxml XML
  2. 幹部dbo.TestProcedure 2、VRESとして@resxml出力
  3. 選択キャスト(varchar型として@resxml(8000))(VARCHARにXMLを変換します)

すべての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; 
 
関連する問題