你如何从通过数据库链接执行的存储过程假脱机?

时间:2012-01-27 21:16:34

标签: unix plsql database spool database-link

我正在使用UNIX脚本来运行通过数据库链接启动存储过程的sql代码。我可以成功完成该过程,但是没有DBMS输出假脱机到指示的SPOOL文件。

UNIX中的SQL:

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;

SPOOLFILE目录:

return code: 0

我在存储过程中列出了一堆DMBS输出,但没有任何内容写入假脱机文件。

如何将其输出到假脱机文件?

我尝试使用IN OUT变量,但由于该过程包含COMMIT,因此它会通过数据库链接错误输出参数...

1 个答案:

答案 0 :(得分:0)

PUT和PUT_LINE的输出被缓冲。来自Oracle docs

  

在PL / SQL程序完成之前,SQL * Plus不显示DBMS_OUTPUT消息。没有用于刷新PL / SQL程序中的DBMS_OUTPUT缓冲区的机制。

因此,如果您要查看流响应,则需要编写一个不缓冲输出的小程序。