我正在开发一个使用 Oracle 高级队列来控制它的 Windows 服务。命令对象将被放置在队列中,服务会将其出列并尝试执行任务。为了控制服务,我还开发了一个小命令应用程序。此应用程序会将命令放入队列,但我也希望它能够在按下按钮时通过调用 dbms_aqadm.purge_queue_table 来清除队列。我试过这两种方法。首先我试过:
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 中运行良好。所以在任何一种情况下,我都会收到错误消息,除非我错过了我不应该得到的东西。我想不出办法解决这个问题。有人可以告诉我我做错了什么或如何解决这个问题吗?