我有一个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
它很好但是在每个选择的第一列的第一行有一个特殊字符。
为什么?我怎么能摆脱这个
由于
答案 0 :(得分:1)
从说明中可以看出,login.sql
或glogin.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