2016-07-25 70 views
0

通過從Oracle(11g)到MS-SQL Server(2012)的ODBC數據庫鏈接,我們嘗試調用返回整數的函數/過程。 SQL Server過程被命名爲帶有2個參數的spProcTest2。此過程返回一個用作錯誤代碼的整數。 有關代碼的示例,請參見下文。從oracle調用sql服務器功能並獲取結果值

問題是如何接收過程返回的值?

注意:在下面的代碼中使用的值'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. EXEC dbo.TestProcedure 2,@resxml輸出
  3. 選擇流延(@resxml爲varchar(8000))作爲VRES(XML轉換到VARCHAR)

所有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; 
 
相關問題