Oracle伪列

这些数据伪列并不是用户在建立数据库对象时由用户完成 的,而是Oracle自动帮助用户建立的,用户只需要按照要 求使用即可。

这些数据伪列并不是用户在建立数据库对象时由用户完成 的,而是Oracle自动帮助用户建立的,用户只需要按照要 求使用即可。

1.ROWID伪列:
在数据表中每一行所保存的记录,实际上Oracle都会默认 为每条记录分配一个唯一的地址编号,而这个地址编号就 是通过ROWID进行表示的。
还是先新建一个表mydept,用它做实验
观察ROWID的存在 SELECT ROWID,deptno,dname,loc FROM mydept ;
orecle伪列的相关学习
使用ROWID可以定位一个数据库中任何数据行,因为它的唯一性
ROWID的组成
组成:
数据对象号(data object number)
相对文件号(relative file number)
数据块号码(block number)
数据行号(row number)
看看它的具体组成
拆分ROWID,取数据
SELECT ROWID ,
DBMS_ROWID.rowid_object(ROWID) 数据对象号 , (这四项是运行的意思)
DBMS_ROWID.rowid_relative_fno(ROWID) 相对文件号 , DBMS_ROWID.rowid_block_number(ROWID) 数据块号 , DBMS_ROWID.rowid_row_number(ROWID) 数据行号,
deptno,dname,loc
FROM mydept ;
看看会出什么
orecle伪列的相关学习
出现四组不同的数据,每一组合应该和ROWID是一一对应的,这也可以看出ROWID的唯一性
ROWID有一个很好的功能就是去重,利用ROWID的唯一性,当一个表被误操作时,有很多重复数据时咋办?怎么删除?就可以利用ROWID,因为就算数据相同,他们的ROWID也是不同的

举例
利用数据插入的知识,我先将mydept的数据重复插入几遍(可以参考本人博客:数据更新)
插入完成,插入了两边,里面有十二条数据了,为了看的更清晰,我做了个排序
orecle伪列的相关学习
orecle伪列的相关学习
可以看到分别有三个相同的数据,但他们的ROWID却时不同的,怎么去重呢,会用一个新的函数group by(列)分组函数,它是将列(括号里的列)数据相同的分成一组(它的注解还是挺多了具体更详细的解释会后续更新,这里只是先用一下,了解ROWID的功能)
然后我们在组里面取ROWID最大的输出出来,这样我们就能把所有的重复的数据规避掉了
操作一下
orecle伪列的相关学习
orecle伪列的相关学习
只显示原本该有的四项了

然后把重复的删掉(数据更新那片博客有删除的操作),需要用子函数
orecle伪列的相关学习
orecle伪列的相关学习
在输入select rowid,deptno,dname,loc from mydept;看一下是否删除成功了
orecle伪列的相关学习
删除成功
最后在commit(提交)一下

相关文章:

  • 2021-05-31
  • 2021-08-24
  • 2021-06-23
  • 2022-12-23
  • 2022-01-09
  • 2022-12-23
  • 2021-10-06
  • 2021-12-02
猜你喜欢
  • 2021-10-14
  • 2021-12-22
  • 2021-05-20
  • 2021-12-18
  • 2021-06-24
  • 2021-05-07
相关资源
相似解决方案