首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

rowid比较怪有关问题

2012-12-21 
rowid比较怪问题语句SELECT * FROM aWHERE ROWID AAKYPgAJOAABP0EAAB有返回语句SELECT * from aWHERE

rowid比较怪问题
语句
SELECT * FROM a
WHERE ROWID = 'AAKYPgAJOAABP0EAAB'
有返回

语句
SELECT * from a
WHERE ROWID = 'AAKYPgAJOAABP0EAAB'
AND ROWID >= 'AAKYPgAJBAABKvFAAA'
也有返回

但是
SELECT * FROM a
WHERE ROWID = 'AAKYPgAJOAABP0EAAB'
AND ROWID >= 'AAKYPgAJBAABKvFAAA' 
AND ROWID <= 'AAKYPgAJOAABP0EQAA'
没有返回

求高人指点
[最优解释]
先执行一下这个
SELECT dbms_rowid.rowid_row_number('AAKYPgAJOAABP0EAAB') from dual;
SELECT dbms_rowid.rowid_row_number('AAKYPgAJOAABP0EQAA') from dual;

rowid不是根据字符来比较的,rowid每一位是使用64进制来表式的.
具体再看一下这个http://blog.csdn.net/tianlesoftware/article/details/5020718
你就会明白
[其他解释]

引用:
语句
SELECT * FROM a
WHERE ROWID = 'AAKYPgAJOAABP0EAAB'
有返回

语句
SELECT * from a
WHERE ROWID = 'AAKYPgAJOAABP0EAAB'
AND ROWID >= 'AAKYPgAJBAABKvFAAA'
也有返回

但是
SELECT * FROM a
WH……

rowid 是6 3开
你最后加的那个AAKYPg  AJB  AABKvF  AAA
AAKYPg:段编号
AJB:相对文件编号
AABKvF:数据块号
AAA:行号
你最后AND ROWID <= 'AAKYPgAJOAABP0EQAA'的相对文件编号和之前不一致?a是分区表吗?可能导致AND条件为false
[其他解释]
原因找到了,估计是oracle的rowid比较不是按照字符串来比较大小的

热点排行