Ждать появления строки

Каскадёр
Дата: 05.12.2012 09:59:17
Всем привет.
Внезапно образовалась тривиальная задачка.
Имеется PL/SQL блок. В нём, на определённом этапе, нужно в течение 700 секунд подождать, пока не появится запись в таблице TABLE, с определённым ID, затем продолжить блок.

Тупой DBMS_LOCK.SLEEP(xxx) это долго, нужно при появлении строки продолжать блок.

Вроде всё просто, но меня не устраивает классический LOOP с ежесекундной выборкой и проверкой на наличие искомой строки. Есть способ поэлегантнее?

P.S. Предполагается, что строка, как правило, появляется в течение 1с (ответ от сервера), но в результате сбоев связи, время может растянуться.
wurdu
Дата: 05.12.2012 10:06:46
dbms_change_notification
-2-
Дата: 05.12.2012 10:15:22
или триггер на вставку.
Ramin Hashimzade
Дата: 05.12.2012 10:18:13
-2-
или триггер на вставку.

и плюс AQ что ли?
Понять бы
Дата: 05.12.2012 10:30:45
Каскадёр
Всем привет.
Имеется PL/SQL блок. В нём, на определённом этапе, нужно в течение 700 секунд подождать, пока не появится запись в таблице TABLE, с определённым ID, затем продолжить блок.

Не совсем понятна сама задумка.
Если блок, скажем, инициировал вставку другой сессией и ждет завершения вставки, то что мешает перенести эту обработку (вставку) в сам блок? Нужна ли здесь вообще асинхронность?
Если все же нужна, то почему не использовать однотипные способы событийной синхронизации? Ведь вставка же как-то инициируется?
Каскадёр
Дата: 05.12.2012 10:34:44
Ну конечно вставка инициируется другой процедурой. Мне лишь нужно быстро обнаружить вставку и продолжить работу.
Каскадёр
Дата: 05.12.2012 10:36:01
И с этой процедурой я общаться и синхронизироваться никак не могу.
Понять бы
Дата: 05.12.2012 10:43:28
Каскадёр,

А чем инициируется запуск самого блока?
Нужен ли он вообще в таком виде? Не лучше ли подумать о разбиении логики на обработку конкретных простых событий?
Proteus
Дата: 05.12.2012 11:04:56
на вскидку вот что придумалось.

в процессе строку от которого ты ждешь создай блокировку DBMS_LOCK.
А в своем процессе жди ее освобождения. При запросе блокировки есть параметр timeout.
Каскадёр
Дата: 05.12.2012 11:05:21
Логика разбита проще некуда. «Та» процедура, которая вставляет эту строку, глубоко закрыта. А мне, чтобы узнать о появлении этой строки, остается лишь мониторить таблицу.

Да и вообще, вопрос был о том как уложить поленицу, а вы мне предлагаете топить печь углём.