14

SQL Server 2008 R2 に 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;

この質問に関する完全なドキュメントは見つかりませんでした。パラメーターのない選択/非選択プロシージャーを使用した単純な例のみであり、これらのプロシージャー、内部で選択されたプロシージャー、基本的なパラメータータイプを使用したマルチパラメータープロシージャーを呼び出す方法を知りたいです。

4

2 に答える 2

13

次のように動作するはずです。

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;
于 2012-12-11T09:36:12.893 に答える
1

REF CURSOR を使用し、そのカーソルを oracle の出力変数として宣言します。Ref Cursor を使用すると、Oracle ストアド プロシージャから結果セットを取得できます。

于 2012-12-18T07:06:56.493 に答える