在Oracle中,你可以使用游标和LIMIT子句来实现分页查询。以下是一个示例:
-- 创建一个表 CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50), salary NUMBER ); -- 插入一些数据 INSERT INTO employees (id, name, salary) VALUES (1, 'Alice', 5000); INSERT INTO employees (id, name, salary) VALUES (2, 'Bob', 6000); INSERT INTO employees (id, name, salary) VALUES (3, 'Cathy', 7000); INSERT INTO employees (id, name, salary) VALUES (4, 'David', 8000); -- 定义一个游标,用于分页查询 DECLARE CURSOR c_employees IS SELECT * FROM employees ORDER BY id; TYPE t_employees IS TABLE OF c_employees%ROWTYPE INDEX BY PLS_INTEGER; l_employees t_employees; l_page_size NUMBER := 2; -- 每页显示的记录数 l_page_number NUMBER := 1; -- 当前页码 BEGIN OPEN c_employees; FETCH c_employees BULK COLLECT INTO l_employees LIMIT l_page_size * l_page_number OFFSET (l_page_number - 1) * l_page_size; CLOSE c_employees; -- 输出结果 FOR i IN 1..l_employees.COUNT LOOP DBMS_OUTPUT.PUT_LINE('ID: ' || l_employees(i).id || ', Name: ' || l_employees(i).name || ', Salary: ' || l_employees(i).salary); END LOOP; END; /
在这个示例中,我们首先创建了一个名为employees
的表,并插入了一些数据。然后,我们定义了一个游标c_employees
,用于查询表中的所有记录。接下来,我们定义了一个类型为t_employees
的变量l_employees
,用于存储查询结果。
我们设置了每页显示的记录数(l_page_size
)和当前页码(l_page_number
)。在这个示例中,我们将每页显示的记录数设置为2,当前页码设置为1。
接下来,我们打开游标,使用FETCH
语句从游标中获取数据,并将其存储到l_employees
变量中。我们使用LIMIT
子句限制返回的记录数,并使用OFFSET
子句跳过之前的页面。最后,我们关闭游标。
在循环中,我们遍历l_employees
变量,并使用DBMS_OUTPUT.PUT_LINE
输出每条记录的信息。