双引号与换行的困惑

PL/SQL Developer 中复制查询结果到文本文件中,查询结果本身看不到双引号和换行。但奇怪的是复制出来的记录中都包含了双引号和换行。这个让我感到很困惑,网上简单查了一下,只看到有人提问,却没有答案。看来只有自己想办法来解决这个问题了。

 

什么原因可能导致结果中出现双引号和换行的问题呢?

思路如下:

1.       工具中的设置有问题。是不是PL/SQL Developer, UltraEdit中有特殊的设置呢?

2.       查询结果是否有异常呢?如查询结果中隐藏着双引号和换行,但在PL/SQL中看不到呢?

 

 

验证第一个猜想:

a)       把查询结果分别复制到UltraEditcsv, Notepad中均发现有双引号和换行。

b)       分别在windowslinuxsql plus中运行同样的sql 查询,发现没有双引号和换行。

c)       查询其它表中的数据复制出来,看不到双引号和换行。

由此可见双引号和换行与数据本身有关.

 

验证第二个猜想:

oracle中用dump查看sql的查询结果如下:

 

SQL> SELECT DUMP(fpath) ,fpath  FROM tarchive1 WHERE ROWID='AAFTSIAARAAA9fcAAA';

 

DUMP(FPATH)                         FPATH     

----------------------------------------------------     ---------------------- 

Typ=1 Len=8: 49,53,49,46,119,97,118,10    151.wav 

 

Dump出的结果代表什么含义呢?用chr()来查看以下。

 

SQL> SELECT chr(49),chr(53),chr(49),chr(46),chr(119),chr(97),chr(118), CHR(10) FROM dual;

 

CHR(49) CHR(53) CHR(49) CHR(46) CHR(119) CHR(97) CHR(118) CHR(10)

-------    -------   -------    -------   --------     -------   -------      -------

1       5       1       .       w        a       v   

 

原来chr(10) 代表换行。原来是他惹的祸,现在把它去掉就可以了。

SQL>update TARCHIVE1  set FPATH=replace(FPATH,chr(10),'') WHERE ROWID='AAFTSIAARAAA9fcAAA';

 

1 row updated

 

SQL> commit;

 

Commit complete

 

SQL> SELECT DUMP(fpath) ,fpath FROM tarchive1 WHERE ROWID='AAFTSIAARAAA9fcAAA';

 

DUMP(FPATH)                       FPATH               

---------------------------------------------------   ------------

Typ=1 Len=7: 49,53,49,46,119,97,118    151.wav 

 

在把查询结果复制到文本文件中,双引号和换行都不见了。

 

调查后发现数据是在Windows中编辑,插入到linux下的oracle中的。

由于windows下回车换行是\r\n ,在unix下是\n。 所以导致出现了上述问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值