Я разрабатываю службу Windows, которая использует Oracle Advanced Queue для управления им. Объекты команд будут помещены в очередь, и служба удалит его и попытается выполнить задачу. Для управления услугой я также разработал небольшое командное приложение. Это приложение будет помещать команды в очередь, но мне также хотелось бы, чтобы он мог очистить очередь, вызвав dbms_aqadm.purge_queue_table всякий раз, когда нажата кнопка. Я пробовал это двумя способами. Сначала я попробовал:Очистка расширенной очереди Oracle в C#
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. Поэтому в любом случае я получаю сообщения об ошибках, которые, если я не пропущу что-то, чего я не должен получать. Я не могу разобраться в этом. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно или как обойти это?
Какую версию Oracle вы используете? Согласно [SO - проблемному вызову пакета с varchar2] (http://stackoverflow.com/questions/14883627/oracle-odp-net-problems-calling-package-procedure-with-parameters), в Oracle 9.2 есть ошибка .0.6.0, который вызывает переплетенные ошибки привязки VARCHAR2. –
Мы находимся на версии 12c –