许多习惯于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