在Oracle中,你可以使用游標(biāo)和LIMIT子句來實現(xiàn)分頁查詢。以下是一個示例:
-- 創(chuàng)建一個表
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
salary NUMBER
);
-- 插入一些數(shù)據(jù)
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);
-- 定義一個游標(biāo),用于分頁查詢
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; -- 每頁顯示的記錄數(shù)
l_page_number NUMBER := 1; -- 當(dāng)前頁碼
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;
-- 輸出結(jié)果
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;
/
在這個示例中,我們首先創(chuàng)建了一個名為employees
的表,并插入了一些數(shù)據(jù)。然后,我們定義了一個游標(biāo)c_employees
,用于查詢表中的所有記錄。接下來,我們定義了一個類型為t_employees
的變量l_employees
,用于存儲查詢結(jié)果。
我們設(shè)置了每頁顯示的記錄數(shù)(l_page_size
)和當(dāng)前頁碼(l_page_number
)。在這個示例中,我們將每頁顯示的記錄數(shù)設(shè)置為2,當(dāng)前頁碼設(shè)置為1。
接下來,我們打開游標(biāo),使用FETCH
語句從游標(biāo)中獲取數(shù)據(jù),并將其存儲到l_employees
變量中。我們使用LIMIT
子句限制返回的記錄數(shù),并使用OFFSET
子句跳過之前的頁面。最后,我們關(guān)閉游標(biāo)。
在循環(huán)中,我們遍歷l_employees
變量,并使用DBMS_OUTPUT.PUT_LINE
輸出每條記錄的信息。