谈谈循环处理物业
2021-09-06 12:18 来源:璧山县养生网
ZDNet软件频道 今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少友都搜索了关键字\"SQL FOR循环\",所以打算在这里说下个人的理解。
上面写着16。随后 PL/SQL也和我们常用的编程语言一样,提供了While、For等循环,我们建几个例子来说明演示下。
首先是While循环:
--while循环
procedure loop_while
(
start_value in number,
end_value in number
)
is
current_value number := start_value;
begin
while current_value =end_value
loop
dbms_t_line(\"now number:\" || current_value);
current_value:=current_value+1;
end loop;
end loop_while;
指定循环的初始值和结束值之后,就可以看到将这2个值之间的数字一行行打印出来了;当然只要while循环条件的求值结果是true,循环就会继续下去,
如果求值条件为false或者null,循环就会终止。这个循环条件每执行一次循环体之前都会先进行判断,因此while循环并不能保证循环体一定能被执行。
所以如果我们无法提前预知所需要巡检的次数的情况下,就可以使用While来进行循环处理。
For循环有2种,分别是数值型FOR循环和游标型FOR循环:
--数值型For循环
procedure loop_num_for
(
lowest in number,
highest in number
)
is
begin
FOR even_number in lowest highest --升序
loop
--处理非平滑增长的索引
if mod(even_number,2)=0
then
dbms_t_line(\"now number:\" || even_number);
end if;
end loop;
end loop_num_for;
这种循环在开始的时候就已经知道循环的次数了,注意这里不需要声明循环索引,因为PL/SQL会自动隐式的用一个integer类型的局部变量作为它的循环索引;
如果要降序循环,必须加上reverse关键字,并且循环上边界和下边界的顺利无需改变:
FOR even_number in reverse lowest highest
loop
dbms_t_line(\"now number:\" || even_number);
end loop;
另外需要说明的是,数值型FOR循环中,索引总是以1为单位递增或递减,所以如果我们的循环条件并非如此理想的平滑增长,我们就必须用一些逻辑代码或者技巧来
达到我们的目的。
如果我们需要对很多行记录做处理时,就可以使用游标型FOR循环:
--游标型For循环
procedure loop_cursor_for
is
begin
declare cursor userinfo_cur is select * from userinfo_table;
begin
FOR userinfo_rec in userinfo_cur
loop
dbms_t_line(\"username is:\" || userinfo_er_name);
end loop;
end;
end loop_cursor_for;
当游标中的所有记录都取出来后,FOR循环就会自动终止,这里不用显示OPEN、CLOSE游标,PL/SQL引擎会自动处理。
上面的循环语句都可以用EXIT 或者 EXIT WHEN来终止其循环,但最好不要这样做,因为这样可能会造成循环的逻辑出现问题,最终造成SQL代码难于跟踪和调试。
最后附上测试用的SQL:
循环
create or replace package body LOOP_TEST_DEMO IS
--while循环
procedure loop_while(start_value in number, end_value in number) is
current_value number := start_value;
begin
while current_value = end_value loop
dbms_t_line(\"now number:\" || current_value);
current_value := current_value + 1;
end loop;
end loop_while;
--数值型For循环
procedure loop_num_for(lowest in number, highest in number) is
begin
FOR even_number in lowest highest
--升序
loop
--dbms_t_line(even_number);
--处理非平滑增长的索引
if mod(even_number, 2) = 0 then
dbms_t_line(\"now number:\" || even_number);
end if;
end loop;
--降序
FOR even_number in reverse lowest highest loop
dbms_t_line(\"now number:\" || even_number);
end loop;
end loop_num_for;
--游标型For循环
procedure loop_cursor_for is
begin
declare
cursor userinfo_cur is
select * from greenet_user_info;
begin
FOR userinfo_rec in userinfo_cur loop
dbms_t_line(\"username is:\" || userinfo_er_name);
end loop;
end;
end loop_cursor_for;
end LOOP_TEST_DEMO;
济南有没有白癜风医院成都哪里有癫痫医院
呼和浩特治妇科医院
-
川博携手济源研究院举办“张大千临摹济源壁画研究”学术交流会
川博携手玄奘研究学术研究院举办“名家真迹玄奘画先为研究学术研究”学术性年会 6同年27日,由玄奘研究学术研究院和云南自然博物馆合组举办的“名家真迹玄奘画先为研究学术研究”学术性年会在云南自然博...
-
羽毛球——亚锦赛:李诗沣准决赛
南方周末照片,仰光,2022年4同年27日 4同年27日,李诗沣在比赛后庆祝胜利。 当日,在菲律宾仰光举行的2022年南亚羽毛球运动会美网八强赛比赛中的,中的国比赛李诗沣以2比1大胜孟加拉比赛拉布里亚·雅,晋级下...
-
瓦妮莎海边度假感觉好!穿比基尼39岁魅力不减,和侄女如亲姐妹
最近瓦妮莎和侄女带上三个妻子去海边玩。从相片中会可以看出,家人玩得很开心,她穿着泳装和她的侄女格林纳达一起出镜,体格极佳,魅力不减当年。瓦妮莎在假期时间也挺开心的。独自在躺椅上的瓦妮莎眼神...
-
女人们过了50岁,夏天穿裙子记住“三不要”原则,显老不说还没气质
对于女人们来说,50岁是一个如此一来,无论是身体静止状态还是心态各个方面都陷于着一个过渡,身体标准型态愈合,外貌和皮肤静止状态越来越差,在平常上受到的局限越来越多,但50+的女人们一定要自信两人...
-
北大攻克芯片世界性解决办法,登上顶刊《自然》
据北京大学官网,2022年5月18日,该校王兴军教授课题组和加州大学圣芭芭拉分校John E. Bowers教授课题组在《自然》期刊显现出版科学研究博士论文,为数不多首次报道了由内嵌不显腔日光梳驱动的新型硅基相干镜像...
-
微念传扬“宋韵”文化,打造国潮东方敬品牌
唐朝作为之文明演进步骤之中的重要上曾时期,之前广受高度重视。苏州作为南宋风景名胜,蕴藏着宋韵人文的精祂内核,近十年,一批出众的宋韵人文国际品牌在此发端,微念共同开发国际品牌山外山众所周知其...