Welcome 微信登录

首页 / 数据库 / MySQL / Oracle伪列和伪表

Oracle的伪列以及伪表   oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Oracle完成的。Oracle目前有以下伪列:一、伪列:  CURRVAL AND NEXTVAL 使用序列号的保留字  LEVEL 查询数据所对应的层级  ROWID 记录的唯一标识  ROWNUM 限制查询结果集的数量 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值。不过你可以像使用其它列那样使用它,但是不能删除改列,也不能对该列的值进行修改、插入。一旦一行数据插入数据库,则rowid在该行的生命周期内是唯一的,即即使该行产生行迁移,行的rowid也不会改变。 ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
二、伪表DUAL 表该表主要目的是为了保证在使用SELECT语句中的语句的完整性而提供的。一般用于验证函数。例如:select sysdate,to_char(sysdate,"yyyy-mm-dd HH24:mm:ss") from dual

oracle的几个伪列函数

ORACLE有几个函数专门用来产生伪列的,rownum,rowid,row_number(),rank,dense_rank,lan 1 Connect by 语句该语句结合伪列rownum或level 可以产生一个结果集.1.    基本用法:产生1~~100之间的整数Select rownum xh from dual connect by rownum<=100;Select level xh from dual connect by level<=100;2.  高级用法2.1.产生所有汉字,汉字内码为:19968~~~40869之间  select t.* from(
    select rownum xh,nchr(rownum) hz from dual
    connect by rownum<65535
  ) t
  where t.xh between 19968 and 40869 2 rownum按行的顺序自动增加产生row_number() 给每个组内的不同记录进行排号(分组可不设)
  1. select t.c_group,  
  2.        t.c_code,  
  3.        t.c_desc,  
  4.        <span style="color:#ff0000;">row_number</span>() over(PARTITION BY c_group ORDER BY c_desc DESC) rn  
  5.   from tp_dictionary t  
  6.  where t.c_group in ("PPSJ001""PPSJ002");  
 3 Rank() 按并列情况跨越排序
  1. select t.c_group,  
  2.        t.c_code,  
  3.        t.c_desc,  
  4.        <span style="color:#ff0000;">RANK</span>() over( ORDER BY c_code ) rn  
  5.   from tp_dictionary t  
  6.  where t.c_group in ("PPGL001""PPSJ002");  
 4 Dense_Rank() 按并列情况排序,不跳跃
  1. select t.c_group,  
  2.        t.c_code,  
  3.        t.c_desc,  
  4.        <span style="color:#ff0000;">Dense_RANK</span>() over( ORDER BY c_code ) rn  
  5.   from tp_dictionary t  
  6.  where t.c_group in ("PPGL001""PPSJ002");  
 5 Lag对列进行偏移(下面是偏移2列)
  1. select t.c_group,  
  2.        t.c_code,  
  3.        t.c_desc,  
  4.        lag(c_code,2,null) over(PARTITION BY c_group ORDER  
  5.  BY c_desc asc) rn  
  6.   from tp_dictionary t  
  7.  where t.c_group in ("PPGL001""PPSJ002");  
Oracle中对象表,ref及deref 对象表的使用Oracle 跳出循环方法相关资讯      Oracle基础教程 
  • Oracle块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数

版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图