ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oralce 复杂查询

Oralce 复杂查询

原创 Linux操作系统 作者:it_wangych 时间:2009-07-14 15:34:18 0 删除 编辑
一共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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle 多列子查询
请登录后发表评论 登录
全部评论

注册时间:2009-07-06

  • 博文量
    43
  • 访问量
    80334