Oralce 复杂查询

一共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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22021749/viewspace-609151/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值