前两天地市一个人问我怎么spool导出来的数据加上一个空行,大概想了一下,就是加换行符之类的,google搜索了一下 得到以下结果:
【chr(10)】->【\r】->【回车】
【chr(13)】->【\n】->【换行】
windows的结束符是\n\r
unix、linux等系统的结束符是\n
windows的换行符
通过实验发现让自己迷惑不解的地方,先来看看试验,保存为test.log,然后用notepad++打开如下
SQL> spool d:\test.log
SQL> select deptno||' '||dname||' '||LOC||chr(10) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(10)
----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno||' '||dname||' '||LOC||chr(13) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(13)
----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno||' '||dname||' '||LOC||chr(13)||chr(13) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(13)||CHR(13)
-----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno||' '||dname||' '||LOC||chr(10)||chr(10) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(10)||CHR(10)
-----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
DEPTNO||''||DNAME||''||LOC||CHR(10)||CHR(10)
-----------------------------------------------------------------------
SQL> select deptno||' '||dname||' '||LOC||chr(13)||chr(10) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(13)||CHR(10)
-----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno||' '||dname||' '||LOC||chr(10)||chr(13) from dept;
DEPTNO||''||DNAME||''||LOC||CHR(10)||CHR(13)
-----------------------------------------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
DEPTNO||''||DNAME||''||LOC||CHR(10)||CHR(13)
-----------------------------------------------------------------------
SQL> spool off;
结论:
1.select deptno||' '||dname||' '||LOC||chr(10) from dept;
没有空行
2.select deptno||' '||dname||' '||LOC||chr(13) from dept;
有一个空行
3.select deptno||' '||dname||' '||LOC||chr(10)||chr(10) from dept;
两个空行
4.select deptno||' '||dname||' '||LOC||chr(13)||chr(13) from dept;
两个空行
5.select deptno||' '||dname||' '||LOC||chr(13)||chr(10) from dept;
三个空行
6.select deptno||' '||dname||' '||LOC||chr(10)||chr(13) from dept;
没有空行
如果使用系统自带的notepad打开的话
1.select deptno||' '||dname||' '||LOC||chr(10) from dept;
没有空行
2.select deptno||' '||dname||' '||LOC||chr(13) from dept;
没有空行
3.select deptno||' '||dname||' '||LOC||chr(10)||chr(10) from dept;
两个空行
4.select deptno||' '||dname||' '||LOC||chr(13)||chr(13) from dept;
没有空行
5.select deptno||' '||dname||' '||LOC||chr(13)||chr(10) from dept;
没有空行
6.select deptno||' '||dname||' '||LOC||chr(10)||chr(13) from dept;
两个空行
但是用问题就出来了,为什么会出现这种差异呢?
windows创建的文件是 \r\n作为一行的结尾, 而unix,linux,mac这种unix类系统是\n作为一行结尾的 \n就是换行符 \r就是回车符,但奇怪的是,如果按照windows的换行符标准,chr(13)chr(10)是\n\r结束,但是空行是两行,而不是理论上的一行。实际上在不同的客户端工具上执行出来也都略有差异。
看下面这个脚本的输出:
--格式化输出
SELECT 'BEGIN' || chr(13) ||'DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => ''STATTEST'',' || chr(13) ||chr(10) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) || 'TABNAME => ''' || TABLE_NAME ||''','|| chr(13) ||chr(10) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) || 'ESTIMATE_PERCENT => 50,'|| chr(13) ||chr(10) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) || 'METHOD_OPT => ''FOR ALL INDEXED COLUMNS'','|| chr(13) ||chr(10) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) || 'DEGREE => 4,'|| chr(13) ||chr(10) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) ||
chr(9) || chr(9) || chr(9) || chr(9) || chr(9) ||chr(9) || chr(9) || 'CASCADE => TRUE);'||chr(13)||chr(10)||'END;'||chr(13)||chr(10)||'/'FROM TABS;
--示例:
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'STATTEST',
TABNAME => 'BONUS',
ESTIMATE_PERCENT => 50,
METHOD_OPT => 'FOR ALL INDEXED COLUMNS',
DEGREE => 4,
CASCADE => TRUE);
END;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12216142/viewspace-765896/
,如需转载,请注明出处,否则将追究法律责任。