1

我有一个过程,我需要将该过程的输出假脱机到一个新的 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;

我需要摆脱第一行。任何想法使用什么设置命令?

4

1 回答 1

2

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

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

于 2015-10-10T16:03:17.180 回答