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



我正在使用一个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输出,但没有任何内容写入假脱机文件。

如何将其输出到spool文件?

我试着使用IN-OUT变量,但由于过程包含COMMIT,它会错误地使用参数,因为它正在通过DB链接。。。

PUT和PUT_LINE的输出被缓冲。从Oracle文档:

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

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

相关内容

  • 没有找到相关文章

最新更新