SQL Server 2008R2にOracleリンクサーバーがあります。 Oracleストアドプロシージャを実行する必要があります(最初に出力パラメーター、2番目のプロシージャーに入力パラメーターを指定)。
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)
IS
BEGIN
-- conditional delete from Oracle table, no select statements
END;
この質問に関する完全なドキュメントは見つかりませんでした。パラメータのない選択/非選択プロシージャを使用した簡単な例のみで、これらのプロシージャの呼び出し方法、内部選択を使用したプロシージャ、基本的なパラメータタイプを使用したマルチパラメータプロシージャを知りたいです。
これは次のように機能するはずです。
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;
REF CURSORを使用して、そのカーソルをOracleの出力変数として宣言します。参照カーソルを使用すると、Oracleストアドプロシージャから結果セットを取得できます。