oracle时间倒序查询_Oralce 复杂查询

本文介绍了Oracle数据库中的层次查询和倒序查询。层次查询利用START WITH和CONNECT BY进行,用于表示数据间的父子关系。倒序查询则通过AS OF子句查看历史数据,适用于Oracle 9i及以上版本,但受到UNDO数据保留时间的限制。示例展示了如何使用这两种查询方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一共4个,CASE 和 WITH 很简单就省略了。

1.层次查询

START WITH condition CONNECT BY condition;

START WITH: 用于指定层次查询的根行。

CONNECT BY: 用于指定父行与子行之间的关系,

在 condition 表达式中,必须使用 PRIOR 引用父行,语法如下:

... PRIOR expr = expr 或 expr = PRIOR expr

示例如下:

SELECT LPAD(' ', 3*(LEVEL-1))||ename ename, LPAD(' ', 3*(LEVEL-1))||job job FROM emp

WHERE START WITH mgr IS NULL CONNECT BY mgr = PRIOR empno;

2.倒序查询

从Oracle 9i开始,通过使用倒序查询(Flashback Query)特征,可以查看到过去某时间点所提交的数据。

注意,如果使用倒序查询,要求数据库必须采用UNDO管理方式,并且初始化参数 undo_retention 限制了

UNDO数据的保留时间。通过在 FROM 子句后指定 AS OF 子句可以查看过去的历史数据。在 AS OF 子句中

既可以指定时间,也可以指定SCN。注意,使用倒序查询只能看到5分钟之前变化的数据,而不能看到5分钟之内变化的数据。

示例如下:

SELECT ename, sal FROM emp AS OF TIMESTAMP to_timestamp('2003-02-23 02:25:10', 'YYYY-MM-DD HH24:MI:SS')

WHERE ename='CLERK';

使用 DBMS_FLASHBACK 包获取指定SCN的数据.

exec dbms_flashback.enable_at_system_change_number(717402)

查询1: SELECT sal FROM emp WHERE ename='SCOTT';

exec dbms_flashback.disable

查询2: SELECT sal FROM emp WHERE ename='SCOTT';

以上摘自:《精通Oracle10g PLSQL编程》

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22021749/viewspace-609151/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值