您的位置:首页 > 数据库 > Oracle

Informix 中如何实现 Oracle rownum 功能的研究

2013-05-24 10:12 786 查看
许多习惯于Oracle的人,通常在开始使用Informix数据库的时候,会遇到各种疑问:Informix不支持,Informix没有这个功能?其实,很多时候Informix只是以不一样的方式来实现,或者通过开发可以实现类似功能。

本文如下部分研究如何在 Informix 中实现 Oracle中的 rownum 的一些应用功能。

大家都知道在Oracle 数据库中有一个伪列 ROWNUM,返回一个从1开始的序列数。可以用来进行全前N条记录,或者分页操作。

Oracle SQL如下:

select * from sometable where rownum <= 100;

select * from sometable where rownum > 100 and rownum <= 200;

SELECT * FROM ( SELECT A.*,ROWNUM AS RN FROM (SELECT * FROM sometable order by col) A WHERE ROWNUM <=  200) T WHERE T.RN > 100


Informix 有更简单、高效的分页功能:

select first 100 * from sometable;

select  skip 100 first 100 * from sometable;

select skip 100 first 100 * from sometable order by col;


记录编号:

在ORACLE中,可以直接通过rownum 得到每条记录的一个编号,

select rownum, * from sometable ;


Informix中需要通过创建一个存储过程来实现类似功能。

CREATE FUNCTION  rownum () returning int as rownum;

define global counter int default 0;

let counter = counter + 1;

return counter;

end function;

CREATE PROCEDURE  init_rownum ();

define global counter int default 0;

let counter = 0;

end procedure;


可以按如下方式使用函数反问记录编号。

execute procedure init_rownum(); --如果在同一个session中要执行多次rownum
select rownum() as rownum, tabname from systables;
select * from (select rownum() as rownum, tabname from systables) order by tabname;


注意:如果在同一个session中要执行多次rownum,则需要先执行:

execute procedure init_rownum();
使计数器归零。

注:本文转载自:http://www.informixchina.net/home/space.php?uid=201&do=blog&id=2079
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: