oracle 存储过程 数组循环

oracle 存储过程 数组循环,第1张

declare

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子句。

 


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6683303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存