我有一个脚本,其中已将LINESIZE设置为1000。
结果是,我通过dbms_output.put_line输出的行显示出来,但是要使该行包含1000个字符,还需要很多额外的空格。
如何更改linesize参数或脚本以允许内容设置行大小并避免输出文件中出现空格?
答案 0 :(得分:3)
您可以尝试将SET TRIMSPOOL和SET LINESIZE一起打开,希望这将有助于您在记录末尾删除多余的空间。
答案 1 :(得分:2)
嗯,如果有办法,我不知道。尽管我 TRIMMED 结果(请参见第3行),但一个简单的过程(模拟您所描述的内容)可以完全按照您的意思进行,使每行长1000个字符(见第3行):
SQL> set linesize 1000
SQL> set serveroutput on
SQL> spool a.txt
SQL> begin
2 for cur_r in (select empno ||' '||ename col from emp) loop
3 dbms_output.put_line(trim(cur_r.col)) ;
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> spool off
因此,我建议另一种方法- UTL_FILE 。就是这样。
首先,作为SYS创建一个目录(对象),该目录指向数据库服务器文件系统中的目录。我的笔记本电脑上有11gXE,因此我选择了其Temp目录。另外,向要使用该目录的用户授予该目录的 read 和 write 特权(在我的示例中为Scott):
SQL> show user
USER is "SYS"
SQL> create directory ext_dir as 'c:\temp';
Directory created.
SQL> grant read, write on directory ext_dir to scott;
Grant succeeded.
现在,过程本身:
SQL> connect scott/tiger
Connected.
SQL> declare
2 v_file utl_file.file_type;
3 begin
4 v_file := utl_file.fopen(location => 'EXT_DIR',
5 filename => 'test.txt',
6 open_mode => 'w',
7 max_linesize => 1000);
8 for cur_r in (select empno ||' '|| ename result from emp) loop
9 utl_file.put_line(v_file, cur_r.result);
10 end loop;
11 utl_file.fclose(v_file);
12 end;
13 /
PL/SQL procedure successfully completed.
SQL>
如果您检查输出文件的内容,您会发现行的大小可变,只要每一行的内容都一样。
希望会有所帮助。