在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
輸出每條記錄的信息。