`

Oracle几个常用的伪列(Pseudo-column)使用

阅读更多

https://blog.csdn.net/u012047933/article/details/39233657

 

Oracle的Pseudo-column,常被翻译成伪列,也有人翻译成虚拟字段。常常有我们的数据操作中带来一些意想不到的效果.
常用到的主要有
sysdate, systimestamp,RowNum ,RowID, CURRVAL, NEXTVAL,UID, USER,Level,ORA_ROWSCN

1.SYSDATE, SYSTIMESTAMP,
SYSDATE 返回当前的系统时间。SYSTIMESTAMP 以TIMESTAMP WITH TIMEZONE 返回当前的日期和时间 sysdate是取机器的时间的, 而systimestamp是显示数据库的时区所在的时间

Select  SysDate from dual 
获取当前服务器时间
结果: 2009-07-14 8:39:28


select  sysdate,sysdate - interval '1' MINUTE  from dual 
获取当前服务器减去1分钟时间
结果: 1    2009-07-14 8:40:28     2009-07-14 8:39:28

select  sysdate,sysdate - interval '1' hour  from dual
获取当前服务器当前时间减去1小时的时间
结果: 1    2009-07-14 8:40:53    2009-07-14 7:40:53

select  sysdate,sysdate - interval '1' day  from dual
获取当前服务器时间减去1天的时间
结果: 1    2009-07-14 8:41:19     2009-07-13 8:41:19

select  sysdate,sysdate - interval '1' month from dual
获取当前服务器时间减去1月的时间
结果: 1    2009-07-14 8:41:38     2009-06-14 8:41:38

select  sysdate,sysdate - interval '1' year  from dual
当前服务器时间减去7年的时间
结果: 1    2009-07-14 8:41:50     2008-07-14 8:41:50

select  sysdate,sysdate - 7*interval '1' hour  from dual
根据时间间隔乘以一个数字
结果: 1    2009-07-14 8:42:11    2009-07-14 1:42:11 (间隔7小时)

上面的结果也可以通过日期的四则运算获取对应的时间

Select  sysdate,sysdate-1 from dual; 
系统默认减一为当前服务器减去一天的时间
结果: 1    2009-07-14 8:41:19     2009-07-13 8:41:19

Select  sysdate,sysdate-1/24 from dual; 
系统默认减1/24为当前服务器减去一小时的时间
结果: 1    2009-07-14 8:40:53    2009-07-14 7:40:53

Select  sysdate,sysdate-1/24/60 from dual; 
系统默认减1/24/60为当前服务器减去一分钟的时间
结果: 1    2009-07-14 8:40:28     2009-07-14 8:39:28

Select sysdate-1/24/60/60 from dual; 
系统默认减1/24/6/600为当前服务器减去一秒的时间
结果: 1    2009-07-14 8:41:19     2009-07-13 8:40:19

其它日期格式化不再叙述

(2)SYSTIMESTAMP是一个函数,返回当前系统的日期

select  systimestamp from dual;
获取当前数据库时间
结果: 1    14-7月 -09 08.38.29.406000 上午 +08:00

select to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS') from dual;
根据格式显示当前日期
结果:1 2009-07-14 08:52:45

select to_char(systimestamp, 'SSSS.FF') from dual;
转化成对应字符类型获取当前时间的毫秒
结果: 1    3939.125000


Select
EXTRACT(year FROM systimestamp) EY,
EXTRACT(month FROM systimestamp) EM,
EXTRACT(day FROM systimestamp) ED,
EXTRACT(hour FROM systimestamp) EH,
EXTRACT(minute FROM systimestamp) EM,
EXTRACT(second FROM systimestamp) ES,
EXTRACT(timezone_hour FROM systimestamp) TH,
EXTRACT(timezone_minute FROM systimestamp) TM,
EXTRACT(timezone_region FROM systimestamp) TR,
EXTRACT(timezone_abbr FROM systimestamp) TA
FROM dual;
结果: 1    2009    7    14    0    47    38.546    8    0    UNKNOWN    UNK




2.RowNum ,RowID

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据. rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值

rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。


获取前10条记录
select rowid,rownum,grade from ubs_grade where rownum <=10;


获取表中3-5的记录:
select * from ( 
select rownum r,grade from ubs_grade 
where rownum <= 5
order by grade ) 
where r > 2


结果:
1    3    b   
2    4    b   
3    5    c   



select rowid,rownum,grade from ubs_grade where rownum between 1 and 10;
结果:
1    AAANCoAAFAAAADYAAA    1    a   
2    AAANCoAAFAAAADYAAB    2    a   
3    AAANCoAAFAAAADYAAC    3    b   
4    AAANCoAAFAAAADYAAD    4    b   
5    AAANCoAAFAAAADYAAE    5    c   



3 CURRVAL, NEXTVAL 要与Sequence一起使用.

必须用以 sequence.NEXTVAL 或 sequence.CURRVAL 格式驻留在同一个数据库中的序列名称(或同义词)来限定 NEXTVAL 或 CURRVAL。第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的.

先创建序列号
Create SEQUENCE ubs_sequence  
    INCREMENT BY 1  -- 每次加几个  
    START WITH 1    -- 从1开始计数  
    NOMAXVALUE      -- 不设置最大值  
    NOCYCLE         -- 一直累加,不循环  
    CACHE 10; 


一旦定义了ubs_sequence,你就可以用CURRVAL,NEXTVAL  
CURRVAL=返回 sequence的当前值  
NEXTVAL=增加sequence的值,然后返回 sequence 值  
比如:  
ubs_sequence.CURRVAL  
ubs_sequence.NEXTVAL 


3.UID, USER,
返回数据库的用户的用户的ID,没有多大的实用性
Select uid, user FROM dual;
结果:1    55    DEZAI



4.Level
level仅仅用于在对表执行层次树遍历的select语句中

5. orA_ROWSCN
orACLE会在表中记录每条记录的最后的变化的SCN,在执行锁定(select … for update),或者增量数据抽取的时候有用.默认情况下,每行记录的ORA_ROWSCN是基于Block的,除非在建表的时候执行开启行级跟踪(create table … rowdependencies)。
默认的情况下,每个块中所有的记录的ORA_ROWSCN都是相同的,当块中任意一条记录发生改变的情况下,块中所有记录的ORA_ROWSCN都会变化为最新值,ORA_ROWSCN的最小粒度是块。

查看与每行关联的SCN
select username,ora_rowscn from ubs_user;
结果:
1    nicky    1874974
2    ddddd    1341863
3    Dezai    1341863
4    Eastjazz    1341863
5    Susu    1341863
6    ChinaBoy    1341863


查看每行最新的事务时间
select username,scn_to_timestamp(ora_rowscn) from ubs_user;




其它
1.SQL> select sys_guid() from dual;
结果:
SYS_GUID()
--------------------------------
45690EA57A5F47FABE6F77C17980ABC0

2. 取得本机IP和服务器IP: 
SQL> select sys_context('userenv','ip_address'), utl_inaddr.get_host_address from dual;
结果:
SYS_CONTEXT('USERENV','IP_ADDR                                                   GET_HOST_ADDRESS
----------------------------------------------------------------------
172.28.2.33 

3..随机数的生成:(100-200之间) 
select round(dbms_random.value(100,200)) from  duals

4.NLSSORT(),用来进行语言排序 
拼音 
Select * FROM TEAM orDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M') 
笔划 
Select * FROM TEAM orDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M') 
部首 
Select * FROM TEAM orDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M') 

5.查询性能较差的语句  

Select ADDRESS, SQL_TEXT, buffer_gets, executions, buffer_gets/executions AVG 
        FROM v$sqlarea 
        Where executions>0 AND buffer_gets > 100000;


6. 查询当前数据库的名称装备和版本 
select instance_name,status,version from v$instance;


总结一下,与大家分享,多多指教.

本文参考了以下相关文章,感谢作者:
http://bbs.linuxpk.com/thread-10595-1-1.html

http://topic.csdn.net/u/20080924/15/8070e357-2aca-4ba2-924a-ceeb1937e1ab.html

分享到:
评论

相关推荐

    前端开源库-pseudo-elements

    标题“前端开源库-pseudo-elements”指向的是一个专门收集和整理CSS伪元素相关资源的开源项目,可能包含了一个详尽的伪元素列表,以及如何在实际项目中使用它们的示例和最佳实践。 描述中的“所有CSS伪元素的列表”...

    MATLAB实现伪距单点定位_MATLAB_to_achieve_pseudo-distance_s_-Pseudo--

    MATLAB实现伪距单点定位_MATLAB_to_achieve_pseudo-distance_s_-Pseudo---distance-single-point-positioning

    Python库 | pseudo-python-0.2.12.tar.gz

    "pseudo-python"这个名字暗示了它可能是一个用于处理伪代码或模拟Python行为的库。在软件开发过程中,伪代码是一种用自然语言或接近目标编程语言的非正式语法来表达算法的方式。这种库可能帮助开发者快速将想法转化...

    前端开源库-has-pseudo-class

    "has-pseudo-class"库的使用方法通常是将其引入到项目中,然后调用其提供的API,传入一个CSS选择器字符串,它会返回一个布尔值,表明该选择器是否含有伪类。这在某些场景下非常有用,比如: 1. **优化CSS性能**:...

    伪列(pseudo column)ROWNUM介绍

    ### 伪列(pseudo column)ROWNUM介绍 #### ROWNUM伪列概述 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被称为虚拟列),它为每一行分配了一个唯一的行号。该行号从1开始递增,但请注意,`ROWNUM`并不是表...

    前端开源库-pseudo-elements.zip

    1. `::before`: 这个伪元素可以在元素的内容前面插入内容,通常用于添加图标、装饰性元素等。它使用`content`属性定义插入的内容,如CSS代码`content: "【"`, 会在这元素前面添加文本"【"。 2. `::after`: 类似于`:...

    前端开源库-has-pseudo-element

    has-pseudo-element开源库的核心功能在于其API,它允许开发者传递一个CSS选择器作为参数,然后库会返回一个布尔值,表明该选择器是否包含了伪元素。这对于检测和验证CSS代码,确保其符合预期,或者在动态生成CSS时...

    tailwindcss-pseudo-elements:TailwindCSS插件,添加伪元素的变体

    TailwindCSS插件,添加伪元素的变体( ::before , ::after , ::first-letter等)。 用法 安装 NPM npm install tailwindcss-pseudo-elements --save-dev 纱 yarn add tailwindcss-pseudo-elements -D 配置 const...

    Pseudo-Mask Matters in Weakly-Supervised Semantic.pdf

    **比例伪掩模生成**:我们引入一个新的度量标准,用于评估每个类别在每个位置的重要性,而非依赖于二分类器训练的得分,以此将扩大的CAMs映射到伪掩模上,更准确地反映图像的语义结构。\n\n3. **模拟欠拟合策略**:...

    # End-to-end Pseudo-LiDAR for Image-Based 3D Object Detection Th

    "pseudo-LiDAR_e2e-master"这个压缩包文件名暗示了这是一个关于端到端伪LiDAR实现的开源项目。在这个项目中,开发者可能已经构建了一个深度学习框架,能够将输入的RGB图像转换为伪LiDAR点云,并在此基础上进行3D对象...

    SalFBNet Learning Pseudo-Saliency Distribution via Feedback Con

    这个数据集利用反馈模型从伪地面真实(pseudo-ground-truth)中学习显著性分布。首先,模型在Pseudo-Saliency数据集上训练,然后在现有的眼动注视数据集上进行微调,以便更好地学习基于眼动注视的可区分特征。 此外...

    tailwindcss-pseudo-element-plugin:一个为Tailwind CSS提供之前和之后的变体以及伪内容{value}实用工具类的插件

    提供一个插件before和after的变体以及pseudo-content-{value}实用工具类,顺风CSS。 安装 从npm安装插件: # Using npm npm install @shimyshack/tailwindcss-pseudo-element-plugin # Using Yarn yarn add @...

    Color_pseudo-random_array_in_the_application_of_th_三维 结构光_伪随机_结构

    是采用伪随机编码结构光照明主动视觉技术,用编码结构光照明被测场景,实现动态三维场景的重建

    前端开源库-pseudo-classes

    前端开源库-pseudo-classes伪类,获取所有CSS伪类的列表。

    Hadoop pseudo-distributed environment (1).mp4

    Hadoop分布式环境搭建教程一

    pseudo-LiDAR_e2e:伪LiDAR_e2e

    用于基于图像的3D对象检测的端到端伪LiDAR 该论文已被《计算机视觉与模式识别2020》所接受。 作者: , , , , , , , 和 引文@inproceedings{qian2020end, title={End-to-End Pseudo-LiDAR for Image-Based 3D ...

    前端开源库-pseudo-classes.zip

    - CSS3引入了更多的伪类,如`:target`(匹配URL锚点所指向的元素)、`:not()`(选择不符合指定条件的元素)和`:matches()`(与CSS4中的`:is()`类似,选择匹配任意一个伪类的元素)。 - 一些浏览器还支持实验性的伪...

    CSS 伪类(Pseudo-classes)

    CSS 伪类(Pseudo-classes) CSS伪类是用来添加一些选择器的特殊效果。 语法 伪类的语法: selector:pseudo-class {property:value;} CSS类也可以使用伪类: selector.class:pseudo-class {property:value;} ...

Global site tag (gtag.js) - Google Analytics