FORALL與BULKCOLLECT的使用方法

2021-08-29 17:52:01 字數 1837 閱讀 2914

1.使用forall比for效率高,因為前者只切換一次上下文,而後者將是在迴圈次數一樣多個上下文間切換。

2.使用bluk collect一次取出乙個資料集合,比用游標條取資料效率高,尤其是在網路不大好的情況下。但bluk collect需要大量記憶體。

使用例子:

(1)定義乙個table

create or replace type string_table as table of varchar2(100);

(2)在儲存過程裡面測試

declare

v_table string_table;

begin

select cust_name

bulk collect into v_table

from cust c

where c.cust_id between 64561 and 64565;

forall idx in 1..v_table.count

insert into cust_test values(v_table(idx));

commit;

end;

create table parts1 (pnum integer, pname varchar2(15));

create table parts2 (pnum integer, pname varchar2(15));

declare

type numtab is table of parts1.pnum%type index by pls_integer;

type nametab is table of parts1.pname%type index by pls_integer;

pnums numtab;

pnames nametab;

iterations constant pls_integer := 500000;

t1 integer;

t2 integer;

t3 integer;

begin

for j in 1..iterations loop -- load index-by tables

pnums(j) := j;

pnames(j) := 'part no. ' || to_char(j);

end loop;

t1 := dbms_utility.get_time;

for i in 1..iterations loop -- use for loop

insert into parts1 values (pnums(i), pnames(i));

end loop;

t2 := dbms_utility.get_time;

foralli in 1..iterations -- useforallstatement

insert into parts2 values (pnums(i), pnames(i));

t3 := dbms_utility.get_time;

dbms_output.put_line('execution time (secs)');

declare

type numlist is varray(6) of number;

depts numlist := numlist(10,20,30,50,60,80);

begin

forallj in 2..4

delete from emp where deptno=depts(j);

commit;

end;

FOR迴圈與FORALL的效能比較

通常在sql語句中給pl sql變數賦值叫做繫結 binding 一次繫結乙個完整的集合稱為批量繫結 bulk binding 批量繫結 bulk binds 可以通過減少在pl sql和sql引擎之間的上下文切換 context switches 提高了效能.批量繫結 bulk binds 包括 ...

pl sql中的forall簡單測試

之前寫過一篇bulk collect的博文,只是對於bulk collect做了簡單的例項。其實不光是bulk collect,forall對於pl sql的效能的提公升也是相當大的。可以參見下面的兩個圖,可以看到其實在pl sql中,可能很多時候我們所寫的pl sql 會在sql引擎和plsql引...

SQL與NoSQL MySQL與NoSQL的融合

寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...