易截截图软件、单文件、免安装、纯绿色、仅160KB

Oracle查找第n个最大值

在国内外许多Oracle DBA站点上,有很多查找表中第n个最大值的小技巧,这些语句确实相当巧妙,它们都独辟蹊径地用到了Oracle表中的一个伪字段“level”。但是在很多情况下,这个语句变成了 美丽的陷阱。如果你想知道为什么,并怎样绕过它,请听我道来!
研究了几天,我发现一种衍生算法,即找出第n个和第m个最大值的差(如下):
列表一:
select max(salary) from empdetails
   where level = &n
   connect by prior salary>salary
   start with salary = ( select max(salary) from empdetails);
此后又发现如下算法,利用Oracle的伪字段level,从最大值开始,按值递减顺序,把记录逐步分层,最后找出第n个最大值和第m个最大值之间的差值。
列表二:
select a.nmax_salary – b.mmax_salary from
  (select max(salary) from empdetails
     where level = &n
     connect by prior salary > salary
     start with salary = (select (max(salary)) from empdetails)
   ) a ,
  (select max(salary) mmax_salary from empdetails
     where level = &m
     connect by prior salary > salary
     start with salary = (select (max(salary)) from empdetails)
   ) b ;
我为此算法的新奇赞叹了很久,值到一天我想利用这个方法时,才发现这个方法并不如想象中那么美妙。
我要从60多个不同值中找出第n个最大值时,输入此语句后,发现如同石沉大海、杳无音讯,屏幕上只有“Statement is running”的提示。为了了解Oracle是怎样分层的,我输入如下语句:
列表三:
select lpad(‘ ‘,level)||salary from empdetails
     connect by prior salary > salary
     start with salary = (select (max(salary)) from empdetails) ;
发现屏幕在不断输出结果,足足等了十多分钟,还在不停地滚动,我意识到这算法存在某些问题。
试着分析一下列表三的结果,发现这个语句的回送记录数与库中不同数值的个数是指数增长,其公式为 RecordsRe = 2Rdeferent_value – 1 ,要在60多个不同值中用该算法找出第n个最大值,不


相关文档:

ORacle语句

 MYSQL/MSSQL/ORACLE数据库脚本代码 收藏
/******************************************************************************/
/*
主流数据库MYSQL/MSSQL/ORACLE测试数据库脚本代码
脚本任务:建立4个表,添加主键,外键,插入数据,建立视图
运行环境1:microsoft sqlserver 2000 查询分析器
运行环境2:mysql5.0 p ......

Oracle Decode函数的用法

DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。DECODE有什么用途呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%,通常的做法是,先选出记录中的工资字段值? select s ......

oracle实例名、数据库名与服务名的理解

实例名(instance_name),一个用于数据库和操作系统之间通信的标志,数据库和操作系统之间要进行交互用的就是实例名,实例名可以和数据库名相同,一会再说数据库名,一般一个数据库名对应一个实例名,一对一关系,但在oracle的集群应用中,数据库名和实例名就是一对多的关系了。
  查看实例名:select instance_name fr ......

Oracle基础语句


1、 
连接数据库
connect uuu/ooo
connect 
sys/ok as sysdba
2、 
创建表空间
create tablespace stu(表空间名
) datafile 

e:\stu.dbf

 size 100m autoextend on next 5m maxsize 500m;
3、& ......

恢复oracle中用pl sql误删除drop掉的表


查看回收站中表
select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;
恢复表
SQL
>flashback table test_drop to before drop;或
SQL
>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to befor ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号