簡體   English   中英

從oracle調用sql server函數並獲取結果值

[英]Call sql server function from oracle and get result value

通過從Oracle(11g)到MS-SQL Server(2012)的ODBC數據庫鏈接,我們嘗試調用返回整數的函數/過程。 SQL-Server-procedure名為spProcTest2,帶有2個參數。 此過程返回一個用作錯誤代碼的整數。 有關代碼示例,請參見下文。

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

注意:在下面的代碼中使用的值'nr'只返回受影響的行數。

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

    c  := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@gtlab;

    DBMS_HS_PASSTHROUGH.PARSE@gtlab(c, v_sql );

    DBMS_HS_PASSTHROUGH.BIND_VARIABLE@gtlab (c,  1 , 1);
    DBMS_HS_PASSTHROUGH.BIND_VARIABLE@gtlab (c,  2 , 5);

    nr := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@gtlab(c);

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

    DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@gtlab(c);

    commit;
END;
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. 選擇cast(@resxml as varchar(8000))作為vres(將XML轉換為VARCHAR)

所有過程



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  := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@NSK_LIFE;

    DBMS_HS_PASSTHROUGH.PARSE@NSK_LIFE(c, v_sql );

    DBMS_HS_PASSTHROUGH.BIND_VARIABLE@NSK_LIFE(c,1, v_out);

    v_res := DBMS_HS_PASSTHROUGH.FETCH_ROW@NSK_LIFE(c);

    DBMS_HS_PASSTHROUGH.GET_VALUE@NSK_LIFE(c,1,v_out); 

    DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@NSK_LIFE(c);
END; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM