仅假脱机DBMS_OUTPUT

时间:2014-08-14 12:43:07

标签: plsql spool

我有一个程序,我需要将此过程的输出假脱机到新的sql文件中。

CREATE OR REPLACE PROCEDURE lock_users_prep
AS
  username varchar2(60);
 BEGIN
    FOR user IN (SELECT username
                FROM dba_users WHERE username NOT IN (SELECT name FROM hr.katastr_users))
  LOOP
    dbms_output.put_line('alter user "'||user.username||'" account lock;');
  END LOOP;
END;
 /


set heading off arraysize 1 pages 0 feedback off echo off verify off
SPOOL lockall.sql
  EXEC lock_users_prep
SPOOL OFF lockall.sql

但是在我的文件lockall.sql中,我仍然有这样的第一行:

> EXEC lock_users_prep
alter user "SYSTEM" account lock;
alter user "SYS" account lock;
alter user "OLAPSYS" account lock;

我需要摆脱第一线。什么设置命令使用的想法?

1 个答案:

答案 0 :(得分:1)

如果使用假脱机创建文件,则受主机和当前环境的影响。例如,许多" set" SQL * Plus中的命令。 DBMS_OUTPUT缓冲区也可能受到限制,如果您发送过多数据,则可能会出现异常。

从PL / SQL写入文件的正确方法是使用UTL_FILE包。这样可以让您更好地控制输出,避免出现此问题。