powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / AQ (enqueue)
17 сообщений из 17, страница 1 из 1
AQ (enqueue)
    #32150056
Sergey M. Medvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто работал с AQ, подскажите, как извлекать записи из очереди?
Необходимо запустить процедуру, которая будет постоянно висеть...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DECLARE
  v_Message InboxObj;
  v_DequeueOptions DBMS_AQ.DEQUEUE_OPTIONS_T;
  v_MessageProperties DBMS_AQ.MESSAGE_PROPERTIES_T;
  v_MsgID RAW( 16 );

BEGIN

  BEGIN
    LOOP
      DBMS_AQ.DEQUEUE(queue_name => 'InboxQ',
        dequeue_options => v_DequeueOptions,
        message_properties => v_MessageProperties,
        payload => v_Message,
        msgid => v_MsgID);

      v_Message.Process;
      COMMIT;
    END LOOP;
  END;
END;



Как такую процедуру запустить???
Может в тригере на StartUp???
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150096
Alexander Sobyanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может лучше джоб?
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150111
Sergey M. Medvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно конечно и JOB, но при перезагрузке базы эта процедура не стартанет!!!
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150564
Guilty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А интересный вопрос, неужели никто не знает?
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150599
Alexander Sobyanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это не стартанет?
1) Джоб запуститься через job_queue_interval с момента старта базы.
2) Есть же триггер на старт базы.
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150609
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"процедуру, которая будет постоянно висеть"

Лично меня смущает терминология. Я не знаю что означает "висеть" применительно к процедуре.
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150624
Sergey M. Medvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура должна ждать события (alert), по приходу которого выполнить некоторые действия и ждать следующего...
Если ее запустить из JOB, то он никогда не завершится (так как процедура - бесконечный цикл), соответственно ее надо как то запустить и не дожидаться завершения ее работы.
При рестарте базы, соответственно ее нужно снова запустить!
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150700
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Процедура должна ждать события (alert), "


Если разговор идёт о процедуре, как о хранимой процедуре Oracle, то ничего она ждать не может. Она может быть просто выполнена и вернуть параметры при необходимости.
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150707
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Da prosto emu nado zapustit' "daemon"...
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150713
Sergey M. Medvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно что надо, вопрос в другом - КАК???
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150747
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OS UNIX?
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150761
Sergey M. Medvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы...
WIN2K
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150791
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Togda eto luchshe sdelat' s pomosh'u "Java Messaging Services (JMS) Communications"
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150798
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это ЛУЧШЕ сделать с помощью JMS, то как это сделать с помощью PL/SQL? Просьба не воспринимать в штыки, просто интересно ...
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150843
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE OR REPLACE PROCEDURE scott.MONITOR_QUEUE
IS
function f_monitor return number
Is
agent_w_message aq$_agent;
agent_list dbms_aq.agent_list_t;
wait_time INTEGER := 120;
no_message EXCEPTION;
pragma EXCEPTION_INIT(no_message, -25254);
order_msg boladm.order_typ;
new_status VARCHAR2(30);
monitor BOOLEAN := TRUE;
begin_time NUMBER;
end_time NUMBER;
BEGIN

WHILE (monitor)
LOOP
BEGIN

/* Construct the waiters list: */
agent_list(1) := aq$_agent('BILLED_ORDER', 'CS_billedorders_que', NULL);
agent_list(2) := aq$_agent('SHIPPED_ORDER', 'CS_shippedorders_que',
NULL);
agent_list(3) := aq$_agent('BACK_ORDER', 'CS_backorders_que', NULL);
agent_list(4) := aq$_agent('Booked_ORDER', 'CS_bookedorders_que', NULL);

/* Wait for order status messages: */
dbms_aq.listen(agent_list, wait_time, agent_w_message);

dbms_output.put_line('Agent' || agent_w_message.name || ' Address '||
agent_w_message.address);
/* Dequeue the message from the queue: */
dequeue_message(agent_w_message.address, agent_w_message.name, order_msg);

/* Update the status of the order depending on the type of the message,
* the name of the agent contains the new state: */
update_status(agent_w_message.name, order_msg);

/* Exit if we have been working long enough: */


EXCEPTION
WHEN no_message THEN
dbms_output.put_line('No messages in the past 2 minutes');
end_time := dbms_utility.get_time;
/* Exit if we have done enough work: */
END;

END LOOP;
return (0);
exception
when others then
return (-1);
END;

v_event number = 0;
begin
v_event := f_monitor;
end;

/

In win2K:: set DB service's status to manual
db_start.bat:

c:\oracle\ora9i\bin\ORACLE.EXE ORASU
sqlplus scott/tiger@my_host monitor_status
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150859
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс, пасиб :))
Век живи, век учись ...
...
Рейтинг: 0 / 0
AQ (enqueue)
    #32150863
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, не плохо было бы добавить в FAQ.
А то там совсем пусто ...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / AQ (enqueue)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]