type typ_rec is record of (student.name%type, student.age%type)--集合变量
type typ_tab is table of typ_rec index by binary_integer --以集合变量为单位的table数组
rec_sql typ_rec
another_rec student%rowtype --跟rec_sql一样
begin
--for循环里的rec_tmp不用定义,可以自动生成的
for rec_tmp in (select t.name, t.age from student t) loop
dbms_output.putline(rec_tmp.name || ' ''s age + 1 = ' || to_char(rec_tmp.age + 1) )
end loop
exception
when others then
return
end
基本上是update/delete语句,forall是批量绑定,本质上是一个sql。它不是循环。所以,你可以用循环预处理你的数据并把结果存放在数组中,等for循环结束之后,用forall把结果写回数据库。在PL/SQL循环中执行数据 *** 作语言(DML)是一件费时的工作,因为每次循环都要由PL/SQL引擎转向SQL引擎。应用FORALL是一个更好的方法,它一次性向SQL语句提交一组临时值。[@more@]
在PL/SQL循环中执行数据 *** 作语言(DML)是一件费时的工作,因为每次循环都要由PL/SQL引擎转向SQL引擎。应用FORALL是一个更好的方法,它一次性向SQL语句提交一组临时值。
在Oracle 10g前,FORALL语句的语法只能处理连续性的数组元素:
FORALL index_name IN lower_bound ..upper_bound sql_statement
这意味着:在以前,使用FORALL的嵌套表不能删除待处理数组中间的元素,而且数组项必须进行连续处理。Oracle 10g解决了这两方面的问题,并增加了INDICES OF和VALUES OF子句。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)