1. 程式人生 > >oracle學習之bulk collect用法

oracle學習之bulk collect用法

View Code 


--在select into語句中使用bulk collect

DECLARE
TYPE SalList IS TABLE OF emp.sal%TYPE;
sals SalList;
BEGIN
-- Limit the number of rows to 100.
SELECT sal BULK COLLECT INTO sals FROM emp
WHERE ROWNUM <= 100;
-- Retrieve 10% (approximately) of the rows in the table.
SELECT sal BULK COLLECT INTO sals FROM emp SAMPLE 10;

END;
/

--在fetch into中使用bulk collect

DECLARE
TYPE DeptRecTab IS TABLE OF dept%ROWTYPE;
dept_recs DeptRecTab;
CURSOR c1 IS
SELECT deptno, dname, loc FROM dept WHERE deptno > 10;
BEGIN
OPEN c1;
FETCH c1 BULK COLLECT INTO dept_recs;
END;
/

--在returning into中使用bulk collect

CREATE TABLE emp2 AS SELECT * FROM employees;
DECLARE
TYPE NumList IS TABLE OF employees.employee_id%TYPE;
enums NumList;
TYPE NameList IS TABLE OF employees.last_name%TYPE;
names NameList;
BEGIN
DELETE FROM emp2 WHERE department_id = 30
RETURNING employee_id, last_name BULK COLLECT INTO enums, names;
dbms_output.put_line('Deleted ' || SQL%ROWCOUNT || ' rows:');
FOR i IN enums.FIRST .. enums.LAST
LOOP
dbms_output.put_line('Employee #' || enums(i) || ': ' || names(i));
END LOOP;
END;
/
DROP TABLE emp2;

通過上面的測試和分析,我們可以看到Bulk
Collect批查詢在某種程度上可以提高查詢效率,它首先將所需資料讀入記憶體,然後再統計分析,這樣就可以提高查詢效率。但是,如果Oracle資料庫的記憶體較小,Shared
Pool Size不足以儲存Bulk Collect批查詢結果,那麼該方法需要將Bulk Collect的集合結果儲存在磁碟上,在這種情況下,Bulk
Collect方法的效率反而不如其他兩種方法,有興趣的讀者可以進一步測試。

另外,除了Bulk Collect批查詢外,我們還可以使用FORALL語句來實現批插入、刪除和更新,這在大批量資料操作時可以顯著提高執行效率。

相關推薦

oracle學習bulk collect用法

View Code --在select into語句中使用bulk collect DECLARE TYPE SalList IS TABLE OF emp.sal%TYPE; sals SalList; BEGIN -- Limit the number of rows to 100. SELECT

Oraclebulk collect用法——批量查詢

  採用bulk collect可以將查詢結果一次性地載入到collections中,而不是通過cursor一條一條地處理。 可以在select into,fetch into,returning into語句使用bulk collect。 注意:在使用bulk colle

Oraclebulk collect用法——批量增刪改

  FORALL語句的一個關鍵性改進,它可大大簡化程式碼,並且對於那些要在PL/SQL程式中更新很多行資料的程式來說,它可顯著提高其效能。 1: 用FORALL來增強DML的處理能力 Oracle為Oracle8i中的PL/SQL引入了兩個新的資料操縱語言(DML)語句:B

Oracle 學習觸發器

星期六 ron alter one 常用 接收 的人 tor summary 1. 觸發器簡介   觸發器是存儲在數據庫服務器中的程序單元,當一個表或一個視圖被改變,或者數據庫發生某些事件時,Oracle會自動觸發觸發器,並執行觸發器中的代碼。只有在觸發器中定義的事件發生時

[轉] Oracle學習創建數據庫(新建實例)

bsp 32位 word src 親測 模式 chm 數據庫實例 test 由於項目需求,在本機中開發,需要新建oracle數據庫實例,親測可以。 出處:http://blog.csdn.NET/luiseradl/article/details/6972217

oracle學習基本查詢和條件過濾,分組函數使用

pic sub 排序 acl date 數值 模糊查詢 使用 char oracle是殷墟出土的甲骨文的第一個單詞,所以在中國叫做甲骨文,成立於1977年,總部位於美國加州。 在安裝好後,主要有兩個服務需要開啟: 1,實例服務,OracleServiceORCL,決定是否可

oracle學習多表查詢,子查詢以及事務處理

color 1-1 註意事項 員工 列數 .com 外連接 分析 top-n分析 多表查詢的基礎是采用笛卡爾集: 最終的行數 = 表1的行數 * 表2的行數 最終的列數 = 表1的列數 + 表2的列數 過濾笛卡爾集的關鍵是寫連接條件,N張表至少需要N-1個條件。 多表

oracle學習集合運算和數據處理

使用 表頭 spa 回滾 dml語句 evo 樣式 sum 設置 集合運算主要有三種方式: 並集,union 兩個集合相同的部份只保留一份,不同部份全部保留    union all 兩個集合全部保留 交集,intersect 兩個集合保留相同的部份 差集,minus A

Oracle學習建立資料庫(新建例項)

出處:http://blog.csdn.net/luiseradl/article/details/6972217 http://wenku.baidu.com/view/864b9b2c453610661ed9f469.html My points: (1)我的頭頭說一般不需要建立資料庫,在Orcl資料庫

oracle 學習:for迴圈中包涵select語句

      oracle中的for迴圈用法比較簡單,但是在一次用到包涵select語句的for迴圈時,還是發現了一些自己以前沒有注意的東西。       我的程式碼如下: declare val1 date;val2 date;begin   for i in (select

oracle學習to_number方法(字串轉數字)

在查詢中排序時避免不了的,一般寫sql我們都會加排序欄位。 如果排序欄位是字串,那就有點麻煩。 比如一個數字欄位,本來應該設計成Integer型的,但設計成了varcher型。 那排序就有問題。數字的話,他會先拍最高位,再拍第2位。 比如8,12降序排序就是8,12而不是

我的Oracle學習路整理

我的Oracle學習之路整理 平常的自學加對大佬分享的記錄。中間缺失的天數都沒怎麼做筆記,什麼時候心情好再補上吧(估計得找到女朋友之後吧)。 目前持續更新中,至於什麼時候停止更新,沒看到這句話了,就沒更新了。 基礎 Oracle基礎知識01 Oracle基礎知識02

kotlin 學習 一些常見用法

When表示式 加強版的switch,支援任意型別 支援純表示式條件分支(類似於if) 表達是必須得完整 fun main(args: Array<String>) { val x = 5 when(x){

ROS學習tf基本用法

主要細節參見wiki,這裡我寫一下它的broadcaster和listener做個記錄: tf_broadcaster.cpp: #include<ros/ros.h> #include<tf/transform_broadcaster.h> in

批量SQL BULK COLLECT 子句

    BULK COLLECT 子句會批量檢索結果,即一次性將結果集繫結到一個集合變數中,並從SQL引擎傳送到PL/SQL引擎。通常可以在SELECT INTO、FETCH INTO以及RETURNI

C#學習Task 的用法1

其實Task跟執行緒池ThreadPool的功能類似,不過寫起來更為簡單,直觀。程式碼更簡潔了,使用Task來進行操作。可以跟執行緒一樣可以輕鬆的對執行的方法進行控制。順便提一下,配合CancellationTokenSource類更為可以輕鬆的對Task操作的程式碼進行中途終止執行,會在後面的章節中講述。如

oracle 學習--------利用遞迴演算法實現階乘

-------------------------- --遞迴演算法實現階乘      -- --create by aven!       -- -------------------------- CREATE OR REPLACE PROCEDURE TEST01(

JAVA 學習implements的用法

implements 也是實現父類和子類之間繼承關係的關鍵字,如類 A 繼承 類 B 寫成 class A implements B{}. 這是百度百科上的解釋: implements是一個類實現一個介面用的 關鍵字 ,他是用來實現介面中定義的抽象方法。

Oracle學習路(二):oracle多表查詢+分組查詢+子查詢講解與案例分析+經典練習題

1.笛卡爾集和叉集 笛卡爾集會在下面條件下產生:省略連線條件、連線條件無效、所有表中的所有行互相連線。 為了避免笛卡爾集, 可以在 WHERE 加入有效的連線條件。在實際執行環境下,應避免使用全笛卡爾集。 使用CROSS JOIN 子句使連線的表產生叉集。叉集和笛卡

oracle學習路(4.14)

1.1、資料庫物件: 1. 表 2. 約束條件:保證資料完整性。 3. 檢視:虛表,命名的查詢語句。 4. 索引:加速查詢(加快查詢的速度)。 5. 序列:一串連續遞增或遞減的數字,步長相同,(代理鍵)。 6. 同義詞:一個物件的另外一個叫法(物件的別名)。 7. 儲存過程