PL/SQL 如何假脱机处理多个文件?

PL/SQL how to spool multiple files?

大家好, 我不明白如何为多个文件的假脱机创建正确的脚本。 我已经阅读了一些关于这个问题的问题,但我无法解决它。

这是我的代码MAIN_PROCEDURE.sql

SET serveroutput ON;
SET trimspool ON;
SET pagesize;

PROCEDURE DINAMIC_SPOOL(file_name VARCHAR2) IS
BEGIN
 dbms_output.put_line('spool '|| file_name || '.txt');
 dbms_output.put_line('bla bla bla');
 dbms_output.put_line('spool off');

END DINAMIC_SPOOL;


BEGIN
 file_name:='test_1';
 DINAMIC_SPOOL(file_name);

 file_name:='test2';
 DINAMIC_SPOOL(file_name);

END;
/
EXIT;

不然还有别的方法吗? 希望得到您的回复。

我认为你尝试做的事情不会奏效。

SPOOL 是 SQLPlus 命令,因此只能由 SQLPlus 直接执行。

DBMS_OUTPUT 服务器上 运行 的 PL/SQL 包:其输出由 SQLPlus 并由 SQLPlus 显示,但它在数据库服务器端执行 运行:并且它不能 运行 SQLPlus 命令。

PL/SQL 过程存在于数据库服务器上。您编写访问数据库的过程和程序包,并且可以 - 通过一些努力,例如使用程序包 UTL_FILE- 在数据库服务器上写入文件。

SQL*Plus 存在于客户端。它可以访问数据库并将查询的输出假脱机到客户端上的文件中。但是,它不是完整的脚本语言,没有循环,没有 if/then,没有程序,只是 SQL in in in SQL*Plus.

可以这么说,SQL*Plus 是 SQL 加上一些 formatting/spooling 额外的东西,PL/SQL 是 (P)procedural (L)anguage for (SQL).