淺談PL/SQL批處理語句:BULK COLLECT與FORALL對優化SEO優
導讀:2SEO優化本篇文章小編為大家介紹一下,淺談PL/SQL批處理語句:BULK COLLECT與FORALL對優化做出的貢獻。有需要的朋友可以參考一下seo網站關鍵詞優化seo網站優化。
我們知道PL/SQL程序中運行SQL語句是存在開銷的,因為SQL語句是要提交給SQL引擎處理這種在PL/SQL引擎和SQL引擎之間的控制轉移叫做上下文卻換,每次卻換時,都有額外的開銷
請看下圖:
但是,FORALL和BULK COLLECT可以讓PL/SQL引擎把多個上下文卻換壓縮成一個,這使得在PL/SQL中的要處理多行記錄的SQL語句執行的花費時間驟降請再看下圖:
下面詳解這爺倆㈠ 通過BULK COLLECT 加速查詢⑴ BULK COLLECT 的用法采用BULK COLLECT可以將查詢結果一次性地加載到collections中,而不是通過cursor一條一條地處理可以在select into ,fetch into , returning into語句使用BULK COLLECT注意在使用BULK COLLECT時,所有的INTO變量都必須是collections舉幾個簡單例子:① 在select into語句中使用bulk collect
復制代碼 代碼如下:
DECLARE TYPE sa高端網站建設llist IS TABLE OF employees.salary%TYPE;sals sallist;BEGINSELECT salary BULK COLLECT INTO sals FROM employees where rownum<=50;--接下來使用集合中的數據END;/
② 在fetch into中使用bulk collect復制代碼 代碼如下:
DECLARETYPE deptrectab IS TABLE OF departments%ROWTYPE;dept_recs deptrectab;CURSOR cur IS SELECT department_id,department_name FROM departments where department_id>10;BEGINOPEN cur;FETCH cur BULK COLLECT INTO dept_recs;--接下來使用集合中的數據END;/
③ 在returning into中使用bulk collect復制代碼 代碼如下:
CREATE TABLE emp 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;BEGINDELETE emp WHERE department_id=30RETURNING employee_id,last_name BULK COLLECT INTO enums,names;DBMS_OUTPUT.PUT_LINE('deleted'||SQL%ROWCOUNT||建設網站'rows:');FOR i IN enums.FIRST .. enums.LASTLOOPDBMS_OUTPUT.PUT_LINE('employee#'||enums(i)||':'||names(i));END LOOP;END;/
deleted6rows:employee#114:Raphaelyemployee#115:Khooemployee#116:Baidaemployee#117:Tobiasemployee#118:Himuroemployee#119:Colmenares
EATE TABLE emp 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 emp 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;/deleted6rows:employee#114:Raphaelyemployee#115:Khooemployee#116:Baidaemployee#117:Tobiasemployee#118:Himuroemployee#119:Colmenares
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-23 ,文章淺談PL/SQL批處理語句:BULK COLLECT與FORALL對優化SEO優主要講述批處理,淺談,SQL網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/seo_6180.html