DBMS_AQADM.PURGE_QUEUE_TABLE с ошибкой ORA-01001: неверный курсор и ORA-06512: в «SYS.DBMS_AQ_INV» - PullRequest
1 голос
/ 15 января 2020

При попытке вручную выполнить указанную ниже команду с пользователем APPS (владельцем очереди WF_BPEL_QTAB) сообщается об ошибке. Мы провели все необходимые исследования, и в очереди нет индексов (как предлагают некоторые решения).

Команда:

declare
  l_purge_options dbms_aqadm.aq$_purge_options_t;
begin
l_purge_options.Block := False;
DBMS_AQADM.PURGE_QUEUE_TABLE(queue_table => 'APPS.WF_BPEL_QTAB'
                            ,purge_condition => 'ENQ_TIME < trunc(sysdate) - 3
                            ,purge_options => l_purge_options);
end;

Ошибка:

ORA-00604: error occurred at recursive SQL level 1
ORA-01001: invalid cursor
ORA-06512: at "SYS.DBMS_AQ_INV", line 208
ORA-00918: column ambiguously defined
ORA-06512: at "SYS.DBMS_AQADM", line 1668
ORA-06512: at line 5

1 Ответ

0 голосов
/ 21 января 2020

При использовании критериев из таблицы очередей необходимо использовать псевдоним qtview. Отсюда

declare
  l_purge_options dbms_aqadm.aq$_purge_options_t;
begin
  l_purge_options.Block := False;
  DBMS_AQADM.PURGE_QUEUE_TABLE(queue_table => 'APPS.WF_BPEL_QTAB'
                              ,purge_condition => 'qtview.ENQ_TIME < trunc(sysdate) - 3
                              ,purge_options => l_purge_options);
end;
...