PL/SQL引入过程化语言的相应元素,比如条件分支或者循环,不过,SQL本身仍然作为主体嵌套于其中,由于需要SQL引擎才能执行SQL命令,对于PL/SQL程序,往往存在许多PL/SQL引擎-SQL引擎之间的交互,过多这样的交互会对性能产生负面影响。
Oracle在PL/SQL中引入了BULK SQL,用于尽量减少PL/SQL – SQL引擎之间的交互,以期提高性能。具体而言,Oracle BULK SQL包括FORALL语句、BULK COLLECT子句。前者将多条语句(通常是DML)一次性发送给SQL引擎;后者将SQL引擎所获得的结果一次性返回给PL/SQL引擎。
(1)FORALL
下面的两个例子对比了FORALL与FOR循环之间的区别:
SQL>createtablet_bulkasselect*fromemployees;
SQL>desct_bulk;
Name Type NullableDefaultComments-------------- ------------ -------- ------- --------EMPLOYEE_IDNUMBER(6) Y
FIRST_NAMEVARCHAR2(20) Y
LAST_NAMEVARCHAR2(25)
EMAILVARCHAR2(25)
PHONE_NUMBERVARCHAR2(20) Y
HIRE_DATE DATE
JOB_IDVARCHAR2(10)
SALARYNUMBER(8,2) Y
COMMISSION_PCTNUMBER(2,2) Y
MANAGER_IDNUMBER(6) Y
DEPARTME