生成的sqlplus文件中的字符不可读

时间:2015-09-16 14:14:59

标签: oracle sqlplus

我有一个shell,其中一个命令行打开sql plus并调用sql文件

$ORACLE_HOME/bin/sqlplus id/psw @SQL_DIRECTORY/myfile.sql

在这个文件中我写了这个:

spool myfile.csv

select 'column 01', ';', 'column 02' from dual;
select myColumn1, ';', mycolum2 from mytable

spool off

它很好但是在每个选择的第一列的第一行有一个特殊字符。

为什么?我怎么能摆脱这个

由于

1 个答案:

答案 0 :(得分:1)

从说明中可以看出,login.sqlglogin.sql user profile正在发出set newpage 0

  

设置从每页顶部到顶部标题要打印的空白行数。 值为零会在每页开头添加一个换页符(包括第一页)并清除大多数终端上的屏幕。如果将NEWPAGE设置为NONE,则SQL * Plus不会在报告页面之间打印空白行或换页。

在Excel中显示为不可打印的字符,在小方块中带有问号;在Notepad ++中,它似乎在反向着色中显示为FF;在某些编辑器(例如Vim)中,它显示为^L。这是ASCII form feed字符,十进制12或0xC。

您可以使用set newpage none重置该值,也可以将其与set pagesize 0无关,这样可以避免删除列标题和分隔符。如果您还没有set feedback off,也可能需要{。}}。

具有对比设置的样本:

set newpage 0;
set feedback on;
set pagesize 100;

spool ctrl.csv
select 'head 1;head 2' from dual;
select sysdate, ';', systimestamp from dual;
spool off


^L'HEAD1;HEAD2'
-------------
head 1;head 2

1 row selected.

^LSYSDATE             ' SYSTIMESTAMP
------------------- - ---------------------------------------------------------------------------

2015-09-16 15:45:42 ;  16-SEP-15 15.45.42.333627 +01:00


1 row selected.

set newpage none;
set feedback off;
set pagesize 0;

spool ctrl.csv
select 'head 1;head 2' from dual;
select sysdate, ';', systimestamp from dual;
spool off

head 1;head 2
2015-09-16 15:46:11 ; 16-SEP-15 15.46.11.274863 +01:00