Oracle SQL-如何使用分页循环记录?

太空少年

我正在使用一个Oracle数据库,其中有一个包含20条记录的表

CREATE TABLE MyTable (
    MY_RECORD_ID NUMBER PRIMARY KEY, 
    SOME_DATA_1 VARCHAR2(200), 
    SOME_DATA_2 VARCHAR2(200)
);

INSERT INTO MyTable VALUES (1, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (2, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (3, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (4, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (5, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (6, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (7, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (8, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (9, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (10, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (11, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (12, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (13, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (14, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (15, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (16, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (17, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (18, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (19, 'BLAH1', 'BLAH2');
INSERT INTO MyTable VALUES (20, 'BLAH1', 'BLAH2');

我想做的是遍历此表,一次基于该MY_RECORD_ID选择5条记录OFFSETFETCH命令似乎让我做到这一点:

SELECT * 
FROM MyTable 
ORDER BY MY_RECORD_ID 
OFFSET 0 ROWS -- start at the first row
FETCH NEXT 5 ROWS ONLY;

我想将上述语句插入循环中,以便可以对五行中的每一行执行数据操作(这样总共执行4次)。有没有办法使用存储过程来做到这一点?

唐·多里安

您可以对此类请求使用分析功能

SELECT my_record_id, some_data_1, some_data_2
  FROM (
        SELECT CEIL(ROW_NUMBER() OVER(ORDER BY mt.my_record_id) / 5/*set the page size*/) page_id
             ,mt.* 
          FROM MyTable mt
       ) t
 WHERE page_id = 1 /* set the desired page*/
ORDER BY my_record_id

您可以查看此文档

分析功能

https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174

问汤姆

https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::P11_QUESTION_ID:1137577300346084930

其他例子

https://blogs.oracle.com/oraclemagazine/on-top-n-and-pagination-queries

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章