易截截图软件、单文件、免安装、纯绿色、仅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 随机获取N条数据


当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目的.   
  
   1) select * from (select * from tablename order  ......

ORACLE to_char函数详解


The following are number examples for the to_char
function.
to_char
(1210.73,
'9999.9')
would return '1210.7'
to_char
(1210.73,
'9,999.99')
would return '1,210.73'
to_char
(1210.73,
'$9,999.00')
would return
'$1,210.73'
to_char
(21,
'000099')
would return '000021'
The foll ......

oracle常用命令

ORACLE常用命令
一、ORACLE的启动和关闭
1、在单机环境下
要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下
su - oracle
a、启动ORACLE系统
oracle>svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>quit
b、关闭ORACLE系统
oracle>svrmgrl
SVRMGR>connect&nb ......

oracle导入文本文件

1.使用sqlldr
2.首先建立相应的表
create table test(ip1 number, ip2 number, locate varchar2(512),country varchar2(60),province varchar2(60),city varchar2(60))
3.写控制文件 city.ctl
load data
infile 'c:\city.txt'
append into table test
--when country='中国'
fields terminated by ','
(
ip1,
ip ......

移植SQL server数据库对象到Oracle的操作说明

以下是摘自Oracle官网:
Ⅰ Oracle SQL Developer 是一个免费的图形化数据库开发工具。使用 SQL Developer,您可以浏览数据库对象、运行 SQL 语句和 SQL 脚本,并且还可以编辑和调试 PL/SQL 语句。您还可以运行所提供的任何数量的报表,以及创建和保存您自己的报表。SQL Developer 可以提高工作效率并简化数据库开发任务。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号