我有一个程序,我需要将此过程的输出假脱机到新的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;
我需要摆脱第一线。什么设置命令使用的想法?
答案 0 :(得分:1)
如果使用假脱机创建文件,则受主机和当前环境的影响。例如,许多" set" SQL * Plus中的命令。 DBMS_OUTPUT缓冲区也可能受到限制,如果您发送过多数据,则可能会出现异常。
从PL / SQL写入文件的正确方法是使用UTL_FILE包。这样可以让您更好地控制输出,避免出现此问题。