web-dev-qa-db-ja.com

SQLServerからの出力パラメータを使用してOracleストアドプロシージャを呼び出す

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;

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

14
Evgeny Levin

これは次のように機能するはずです。

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;
12
Codo

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

1
Nivin Govindan