许多习惯于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 > 100Informix 有更简单、高效的分页功能:
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
本文对比了Oracle和Informix数据库中实现分页查询及记录编号的方法。介绍了Oracle中利用ROWNUM进行分页及编号的操作,并详细展示了Informix中更为高效简洁的分页查询实现方式以及通过存储过程实现类似ROWNUM的功能。
747

被折叠的 条评论
为什么被折叠?



