天天看點

在SQL Server通過DBLINK執行ORACLE存儲過程

從SQL Server使用輸出參數調用Oracle存儲過程(Calling Oracle stored procedure with output parameter from SQL Server)

我在SQL Server 2008 R2中有一個Oracle連結伺服器. 我需要執行Oracle存儲過程(在第一個過程中使用輸出參數,在第二個過程中使用輸入參數):

CREATE OR REPLACE PROCEDURE my1.spGetDate(CurrentDate OUT VARCHAR2)

IS

BEGIN

-- set output parameter, no select statements

END;

CREATE OR REPLACE PROCEDURE my1.spDeleteOldRecords(CurrentDate IN VARCHAR2)

-- conditional delete from oracle table, no select statements

我沒有找到有關此問題的完整文檔,隻有帶有無參數選擇/非選擇過程的簡單示例,并且想知道如何調用這些過程,具有内部select的過程以及具有基本參數類型的多參數過程.

>

解決方案

它應該像這樣工作:

DECLARE @dateval DATETIME

EXECUTE ('begin my1.spGetDate(?); end;', @dateval OUTPUT) AT ORA_DBLINK_NAME;

EXECUTE ('begin my1.spDeleteOldRecords(?); end;', @dateval) AT ORA_DBLINK_NAME;

如果您有幾個參數,它可能看起來像這樣:

EXECUTE ('begin my1.spProc(?,?,?,?); end;', @param_in_1, @param_in_2, @param_out_3 OUTPUT, @param_out_4 OUTPUT) AT DBLINK_NAME;

出錯提示:

消息 7411,級别 16,狀态 1,第1行

未将伺服器 'ORA_DBLINK_NAME' 配置為用于 RPC。

解決方式:

exec sp_serveroption @server='ORA_DBLINK_NAME' , @optname= 'rpc', @optvalue ='TRUE'

exec sp_serveroption @server='ORA_DBLINK_NAME' , @optname= 'rpc out', @optvalue='TRUE'

來源:網絡

優質生活從拆開始