2
我想在Oracle/PLSQL中執行某些操作,我希望通過遊標從數據庫中選擇一些內容並將其存儲到行數組中,以便後續處理。搜索谷歌,但無濟於事。將感謝這裏的任何幫助。用於存儲行的Oracle PL/SQL中的數組
我心裏有什麼
- 使用光標通過DB讀
- 其符合特定判定基準進行的一組行的陣列
- 打印的
- 排序店行使用dbms_output.put_line的行數組中的項目
我想在Oracle/PLSQL中執行某些操作,我希望通過遊標從數據庫中選擇一些內容並將其存儲到行數組中,以便後續處理。搜索谷歌,但無濟於事。將感謝這裏的任何幫助。用於存儲行的Oracle PL/SQL中的數組
我心裏有什麼
請看PL/SQL Collections。您可以創建一個PL/SQL記錄的集合,其中記錄被定義爲表的%ROWTYPE。然後你加載該表&對其執行操作。
例如:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, employee_name from employees;
TYPE employeeArrayType IS TABLE OF a_cur%ROWTYPE;
employeeArray employeeArrayType;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor BULK COLLECT INTO employeeArray LIMIT 100;
EXIT WHEN emp_cursor%NOTFOUND;
END LOOP;
CLOSE emp_cursor;
-- Now you can do work with employeeArray
END;
代碼聲明我的光標和收集,然後加載使用FETCH..BULK在一個循環中(這是可取的大量數據)收集過程的集合。
但是,Codo的評論適用於此 - 如果您將數據篩選和排序爲SQL查詢的WHERE子句& ORDER BY子句,則會更容易。當你擁有一個數據庫引擎時,並不是很多情況下用程序語言來做集合操作會更好。一些ETL過程可能需要它,但對於您的問題,我真的會建議您在SQL中完成工作,然後使用最終結果集。
這就是說,排序PL/SQL記錄集合並不像想象的那麼容易。有關集合分類方法的概述,請參閱AMIS technology blog(和第2部分的here)。
在PL/SQL數組中過濾和排序數據的原因是什麼?爲什麼不在初始SQL語句中使用WHERE和ORDER BY子句?這是你嘗試實施的一種反模式。 – Codo 2011-04-01 13:58:17
在客戶端進行排序的大型系統中,現實生活中有解決方案。原因是從數據庫中獲取負載。但在這種情況下,它是在數據庫方面完成的,所以我猜這種方式對執行計劃影響很大。 – 2011-04-02 06:41:59