Я бы запросил у OMG Ponies дополнительную информацию.
В зависимости от того, что вы пытаетесь выполнить, вы можете посмотреть в пакет DBMS_JOBS. Это позволяет вам отправить задание в базу данных, которая работает асинхронно. Если вы хотите, чтобы база данных выполняла что-то вычислительно дорогостоящее в ответ на GUI, например, ваш интерфейс мог бы выполнить что-то вроде
CREATE OR REPLACE PROCEDURE run_asynchronously( p_some_parameter IN PLS_INTEGER,
p_jobno OUT PLS_INTEGER )
AS
BEGIN
dbms_job.submit( p_jobno,
'BEGIN ' ||
' some_expensive_procedure( ' ||
to_char(p_some_parameter) || ' ); ' ||
'END;' );
RETURN p_jobno;
END;
Это передало бы фоновое задание для запуска SOME_EXPENSIVE_PROCEDURE с передачей P_SOME_PARAMETER. Задание не будет запущено до тех пор, пока базовая транзакция не зафиксируется, что отлично, если SOME_EXPENSIVE_PROCEDURE выполняет что-то, что не может быть откатано, например отправка электронной почты или FTP-файл.