Refcursor、varchar2、および数値を出力するストアドプロシージャの構文は何ですか?
カウントを表示するために、結果の3つすべてと、sys_refcursor出力に加えてクエリが成功したことを示すメッセージを出力したいのですが、その良い例を見つけることができないようです。
私の現在のC#コードは次のようになります。
using Oracle.DataAccess.Client;
//...
OracleCommand myCmd = new OracleCommand();
myCmd.Connection = myConnection;
myCmd.CommandText = "mypackage.myprocedure"
myCmd.CommandType = CommandType.StoredProcedure;
OracleParameter param0 = myCmd.Parameters.Add("myinput", OracleDbType.Varchar2, myinput, ParameterDirection.Input);
OracleParameter param1 = myCmd.Parameters.Add("myretcursor", OracleDbType.RefCursor, ParameterDirection.Output);
myConnection.Open();
OracleDataReader resultReader = myCmd.ExecuteReader();
mydatatable.Load(resultReader, LoadOption.OverwriteChanges);
oracleのストアドプロシージャは次のようになります。
PROCEDURE myprocedure (myinput IN Varchar2, myretcursor OUT sys_refcursor)
IS
BEGIN
OPEN myretcursor FOR
SELECT * FROM MYTABLE
END myprocedure
追加の出力パラメーターとしてparam2、param3をc#に追加したいと思います。それから、どういうわけかそれらもストアドプロシージャに出力しますか?これを行う方法がわからず、エラーが発生し続けました。理想的には、たとえば、選択カウント(*)を出力としてc#アプリケーションに渡すとともに、「Query Successful」のようなvarchar2文字列メッセージを渡すのが理想的です。
ありがとうございました。
更新:ヴィンセントのソリューションは以下で機能します...背後にあるC#コードに関して、彼が提供したリンクへの回答は、reader = executereaderをUSING()で囲んでテーブルをロードし、他の変数をロードする前にリーダーを閉じることを推奨しています。
https://stackoverflow.com/q/6882690/613799
Oracleからの文字列のサイズによっては、呼び出し元のc#コードで、文字列メッセージの出力パラメーター定義にvarchar2のサイズを指定する必要がある場合があります。最後に、次のリンクは、カウントをOracleDecimalからC#intに型キャストするのに役立ちました。
プロシージャに2つのOUT
パラメータがありません:
PROCEDURE myprocedure (myinput IN Varchar2,
myretcursor OUT sys_refcursor,
p_count OUT NUMBER,
p_message OUT VARCHAR2) IS
BEGIN
OPEN myretcursor FOR
SELECT * FROM MYTABLE;
p_count := 123;
p_message := 'message';
END myprocedure
それに応じて、新しいOUT
パラメータを登録するためにC#
コードを変更する必要もあります。