как вы буферизируете хранимую процедуру, которая выполняется через ссылку на базу данных? - PullRequest
0 голосов
/ 28 января 2012

Я использую сценарий UNIX для запуска SQL-кода, который запускает хранимую процедуру по ссылке в базе данных.Я могу заставить процедуру завершиться успешно, однако ни один из выходных данных СУБД не буферизуется в указанный файл SPOOL.

SQL в UNIX:

set feedback off;
set linesize 500;
set serveroutput on size 1000000;
set serveroutput on format wrapped;
spool $SQLspool;

whenever oserror exit;
whenever sqlerror exit sql.sqlcode;

DECLARE

retcode integer :=0;

BEGIN

owner.procedure@db;

dbms_output.put_line('');
dbms_output.put_line('return code: ' || retcode);
dbms_output.put_line('');


EXCEPTION
        WHEN OTHERS THEN
        RAISE;  

END;
/
EXIT;

СОДЕРЖАНИЕ СПУЛЬФИЛЯЦИИ:

return code: 0

Я перечисляю кучу выводов DMBS в хранимой процедуре, но в файл спула ничего не записывается.

Как я могу получить его для вывода в файл спула?

Я пытался иметь переменные IN OUT, но поскольку процедура содержит COMMIT, она выдает ошибки с параметрами, так как она проходит через соединение с БД ...

1 Ответ

0 голосов
/ 30 января 2012

Выход для PUT и PUT_LINE буферизуется. Из документов Oracle :

SQL * Plus не отображает сообщения DBMS_OUTPUT, пока не завершится программа PL / SQL. В программе PL / SQL отсутствует механизм очистки буферов DBMS_OUTPUT.

Итак, если вы ищете потоковые ответы, вам нужно написать небольшую программу, которая не буферизует вывод.

...