許多習慣於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中要執行多次rownumselect 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