|
|
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Кто работал с AQ, подскажите, как извлекать записи из очереди? Необходимо запустить процедуру, которая будет постоянно висеть... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Как такую процедуру запустить??? Может в тригере на StartUp??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 13:03 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Можно конечно и JOB, но при перезагрузке базы эта процедура не стартанет!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 13:51 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
А интересный вопрос, неужели никто не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 08:10 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Как это не стартанет? 1) Джоб запуститься через job_queue_interval с момента старта базы. 2) Есть же триггер на старт базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 09:22 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
"процедуру, которая будет постоянно висеть" Лично меня смущает терминология. Я не знаю что означает "висеть" применительно к процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 09:34 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Процедура должна ждать события (alert), по приходу которого выполнить некоторые действия и ждать следующего... Если ее запустить из JOB, то он никогда не завершится (так как процедура - бесконечный цикл), соответственно ее надо как то запустить и не дожидаться завершения ее работы. При рестарте базы, соответственно ее нужно снова запустить! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 09:49 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
"Процедура должна ждать события (alert), " Если разговор идёт о процедуре, как о хранимой процедуре Oracle, то ничего она ждать не может. Она может быть просто выполнена и вернуть параметры при необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 10:52 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Da prosto emu nado zapustit' "daemon"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 10:55 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Понятно что надо, вопрос в другом - КАК??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 11:02 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Togda eto luchshe sdelat' s pomosh'u "Java Messaging Services (JMS) Communications" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 12:02 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Если это ЛУЧШЕ сделать с помощью JMS, то как это сделать с помощью PL/SQL? Просьба не воспринимать в штыки, просто интересно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 12:11 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 12:58 |
|
||
|
AQ (enqueue)
|
|||
|---|---|---|---|
|
#18+
Класс, пасиб :)) Век живи, век учись ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32150056&tid=1990770]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
83ms |
get topic data: |
17ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 464ms |

| 0 / 0 |
