oracle中的不可见字符
今天做统计的时候发现一个数据表面上看来是‘920 ’但去空格无乱如何都去不掉,最后发现是不可见字符。。。
于是在网上搜到一篇文章,如何来判断这个不可见字符的问题~
按下面的方法判断出不可见字符的ascII码是10,于是用rtrim('原字符','chr(10)')来去掉这个不可见字符。
今天遇到一则案例,问题是数据库中看来完全相同的字段却存在长度差异。
通过lengthb以及dump,我们可以知道问题所在:
SQL> select trim(log.sname),dump(log.sname),lengthb(log.sname)
2 from st.LIMPORT_LOG log
3 where log.dfee > date '2008-06-22'
4 and log.dfee < date '2008-06-23'
5 and log.sspname like '263%'
6 group by log.sname,dump(log.sname);
TRIM(LOG.SNAME) DUMP(LOG.SNAME) LENGTHB(LOG.SNAME)
------------------- ----------- ----------------------------------------------
263网络通信 Typ=1 Len=15: 50,54,51,205,248,194,231,205,168,208,197,0,0,0,0 15
263网络通信 Typ=1 Len=11: 50,54,51,205,248,194,231,205,168,208,197 11
使用DUMP函数我们发现,在有问题的数据中,数据末尾存在几个字符0,0,0,0,也就是多出了几个字符。
正是这多出的几个字符导致了存储异常。
那么这个0代表什么字符呢?在ASCII编码表里我们可以看到这对应了一个不可见字符,这是数据入库时的异常导致的:
-The End-
相关文档:
在Oracle中的树形操作
1.取子节点及路径(正树):
select t.id ,t.code, t.name ,t.pid
,SYS_CONNECT_BY_PATH(t.id,'.')||'.' as IdPath
from tas_catalog t
--where id!=110
start with id=110
connect by pid = prior id
order siblings by id
2.取各级父节点(倒树):
select t.id ,t.code, t.na ......
查看正在执行的sql语句
SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece;
捕捉运行很久的SQL
select username,sid,opname, round(sofar*100 / totalwork,0) || '%' as progress, time_remaining,sql_text from v$session_longops , v$ ......
IP 地址做如下修改:
Public IP 10.85.10.119/121 -- > 10.85.10.219/221
Privite IP 192.168.1.119/121 -- > 192.168.1.219/221
Virtual IP 10.85.10.122/123 -- ......
Oracle执行计划的相关概念:
rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库id以及一个流水号等信息,rowid在行的生命周期内唯一。
recursive sql:为了执行用户语句,系统附加执行的额外操作语句,譬如对数据字典的维护等。
row source(行源):oracle执行步骤过程中,由上一 ......