Oracle Advanced Queue を使用して制御する Windows サービスを開発しています。コマンド オブジェクトはキューに配置され、サービスはそれをデキューしてタスクの実行を試みます。サービスを制御するために、小さなコマンド アプリケーションも開発しました。このアプリケーションはコマンドをキューに入れますが、ボタンが押されるたびに dbms_aqadm.purge_queue_table を呼び出してキューをパージできるようにしたいと考えています。私はこの2つの方法を試しました。最初に試しました:
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbms_aqadm.purge_queue_table";
cmd.Parameters.Add("queue_table", "PRISMPRO_Q_TAB");
cmd.Parameters.Add("purge_condition", DBNull.Value);
cmd.Parameters.Add("purge_options", DBNull.Value);
cmd.ExecuteNonQuery();
conn.Close();
}
次のエラーが表示されます。
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PURGE_QUEUE_TABLE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
dbms_aqadm.purge_queue_table には 3 つのパラメーターがあり、3 つの引数を渡しました。さらに、それらは正しいタイプです。このエラーが発生する理由を私が知る限り、これ以上の理由はありません。これを解消する方法がわからなかったので、次のことを試しました。
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "exec dbms_aqadm.purge_queue_table('PRISMPRO_Q_TAB', NULL, NULL)";
cmd.ExecuteNonQuery();
conn.Close();
}
エラーが発生しました:
ORA-00900: invalid SQL statement
SQL ステートメントは無効ではありません。SQL Developerで問題なく動作します。そのため、どちらの場合でも、何かを見逃していない限り、取得してはならないというエラー メッセージが表示されます。これを回避する方法がわかりません。誰かが私が間違っていること、またはこれを回避する方法を教えてもらえますか?