Ожидание результата из внешней процедуры: в ней самой или в PL/SQL?

Кроик Семён
Дата: 12.06.2006 11:56:55
Привет! Такой вопрос:

собираюсь реализовать внешнюю процедуру. В зависимости от входных параметров она будет выполняться до 30 сек.
Приходят в голову такие варианты реализации:

  • процедура после вызова выполняется до получения результатов и только после этого возвращает результаты в Oracle
  • то же самое, но в процессе выполнения периодически посылаются в Oracle (как, пока не знаю) сообщения типа "ждёмс"
  • из Oracle процедура вызывается в ассинхронном режиме, т.е. только запускается на выполнение. При помощи другой функции в цикле опрашивать внешную библиотеку "ты уже посчитал?". И когда ответ будет "да", при помощи третей функции забирать искомые результаты.
  • andrey_anonymous
    Дата: 12.06.2006 12:59:56
    Oracle AQ.
    Кроик Семён
    Дата: 12.06.2006 13:39:00
    AQ

    Oracle introduced powerful queuing mechanisms where messages can be exchanged between different programs. They called it Advanced Queuing AQ


    Спасибо, конечно, за наводку... Но что она мне дает? Насколько я понимаю, она мне поможет только, если я реализую варианты 2 и 3. Сейчас же я спрашиваю, какой вариант вообще выбрать и о чем думать собственно...
    Кроик Семён
    Дата: 12.06.2006 13:41:29
    P.S.
    Хотя, пожалуй, мне AQ вообще не поможет
    andrey_anonymous
    Дата: 12.06.2006 13:43:50
    Кроик Семён
    за наводку... Но что она мне дает?

    Относительно простой механизм организации асинхронного взаимодействия.
    Имеет ли смысл применять или заняться реализацией синхронного варианта - зависит целиком и полностью от задачи и требований к вызывающему модулю. Если может ждать возврата управления непрогнозируемое время - то можно делать на базе синхронных вызовов.
    Не может - остается только async.
    Кроик Семён
    Дата: 12.06.2006 14:15:00
    Кроик Семён

    ... В зависимости от входных параметров она будет выполняться до 30 сек.
    Приходят в голову такие варианты реализации:

  • (1) процедура после вызова выполняется до получения результатов и только после этого возвращает результаты в Oracle
    ...
  • (3) из Oracle процедура вызывается в ассинхронном режиме, т.е. только запускается на выполнение. При помощи другой функции в цикле опрашивать внешную библиотеку "ты уже посчитал?". И когда ответ будет "да", при помощи третей функции забирать искомые результаты.


  • Прошу конкретного ответа с аргументацией, что лучше, пункт 1 или 3 ???
    andrey_anonymous
    Дата: 12.06.2006 14:36:17
    Кроик Семён
    Прошу конкретного ответа с аргументацией, что лучше, пункт 1 или 3 ???

    Повторяю:
    andrey_anonymous
    Имеет ли смысл применять или заняться реализацией синхронного варианта - зависит целиком и полностью от задачи и требований к вызывающему модулю. Если может ждать возврата управления непрогнозируемое время - то можно делать на базе синхронных вызовов.
    Не может - остается только async.
    Кроик Семён
    Дата: 12.06.2006 17:43:22
    спасибо за советы.

    Почему я спрашиваю:
    что произойдет с ораклом, если запущенная на вычисление процедура вернет результаты через 30 секунд (синхронный запуск)? Всё будет это время "висеть"?
    Elic
    Дата: 12.06.2006 21:25:08
    Кроик Семён
    что произойдет с ораклом, если запущенная на вычисление процедура вернет результаты через 30 секунд (синхронный запуск)? Всё будет это время "висеть"?
    По другому не бывает. Oracle будет. И клиент, если только не используется nonblocking режим.
    Кроик Семён
    Дата: 13.06.2006 09:00:13
    Elic
    По другому не бывает. Oracle будет. И клиент, если только не используется nonblocking режим.


    Я это подозревал и по-этому придумал способ 3:

    автор

  • из Oracle процедура вызывается в ассинхронном режиме, т.е. только запускается на выполнение. При помощи другой функции в цикле опрашивать внешную библиотеку "ты уже посчитал?". И когда ответ будет "да", при помощи третей функции забирать искомые результаты.


  • А при таком вызове есть возможность избежать "зависания" Оракла???