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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值