[英]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';
所有過程
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.