您的位置:首页 > 数据库 > Oracle

Oracle PL/SQL开发基础(第八弹:ROWID伪列)

2017-04-12 23:04 585 查看
ROWID是一种数据类型,它使用基于64位编码的18个字符来唯一标识一条记录的物理位置的一个ID。

默认情况下,索引会按照ROWID的顺序显示,因此当对两条完全相同的记录进行排序时,结果会按照ROWID的顺序来进行排序。

ROWID虽然可以从表中进行查询,但是其值并未存储在表中,因此不支持插入、更新和删除。

可以使用ROWIDTOCHAR转换为字符串进行显示:

SELECT SUBSTR (ROWIDTOCHAR (ROWID), 0, 6) 数据对象编号,
SUBSTR (ROWIDTOCHAR (ROWID), 7, 3) 文件编号,
SUBSTR (ROWIDTOCHAR (ROWID), 10, 6) 文件编号,
SUBSTR (ROWIDTOCHAR (ROWID), 16, 3) 文件编号
FROM emp
WHERE ROWNUM <= 5;


ROWID由18个基于BASE64编码的字符串组成,其格式为:

数据对象编号文件编号块编号行编号
OOOOOOFFFBBBBBBRRR
在编写查询语句时,使用ROWID可以完成很多事情,比如在数据更新方面。

在PL/SQL开发工具或Toad开发工具中,如果直接写一行单表查询的语句,在Grid中是不允许对查询结果进行编辑的,如果在查询中包含ROWID,则可以在Grid中编辑数据。如:

SELECT ROWNUM, x.* FROM emp x


ROWID的另一个重要的作用是删除完全重复的两条记录。

在没有主键的表中,可能存在两条完全重复的记录,这时候想要删除其中一条时,就可以使根据ROWID来删除,因为每行的ROWID都是不同的。

如:

DELETE FROM emp WHERE ROWID = '...';


还可以用ROWID去除表中重复数据,比如想要删除表中empno重复的数据,可以:

DELETE FROM emp_rowid
WHERE ROWID NOT IN (SELECT MIN (ROWID)
FROM emp_rowid
GROUP BY empno);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: