溫馨提示×

oracle游標(biāo)如何實現(xiàn)分頁查詢

小樊
94
2024-09-03 13:08:56
欄目: 云計算

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

0