日期:2014-05-16  浏览次数:20948 次

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比较不是按照字符串来比较大小的