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

Unreadable character in generated sqlplus file

我有一个 shell,其中一个命令行打开 sql 加上并调用一个 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

它工作得很好但是在每个 select 的第一列的第一行有一个特殊字符。

这是为什么?我怎样才能摆脱这个

谢谢

根据描述,您似乎有 login.sqlglogin.sql user profile that is issuing set newpage 0:

Sets the number of blank lines to be printed from the top of each page to the top title. A value of zero places a formfeed at the beginning of each page (including the first page) and clears the screen on most terminals. If you set NEWPAGE to NONE, SQL*Plus does not print a blank line or formfeed between the report pages.

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

您可以使用 set newpage none 重置它,或者使其与 set pagesize 0 无关,这样可以方便地删除列 headers 和分隔符。如果您还没有,您可能还想 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