0

我正在使用 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;

假脱机文件内容:

return code: 0

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

我怎样才能让它输出到假脱机文件?

我尝试使用 IN OUT 变量,但是由于该过程包含 COMMIT,因此它会因参数错误而出错,因为它正在通过 DB Link ...

4

1 回答 1

0

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

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

因此,如果您正在寻找流式响应,您将需要编写一个不缓冲输出的小程序。

于 2012-01-30T15:53:27.880 回答