db2 中的while循环问题

IORI__ 2011-01-05 04:05:19
我写了一个while循环语句,但是不知道如何终止循环,我像用break停止循环,但是报错,请指教一下。
IF v_IsSupervisor = 1 THEN
SET v_ParentID = v_OrgID;
WHILE 1 = 1 DO
SELECT ParentID,OrgID,TitleID
INTO v_ParentID,v_CurrentOrgID,v_CurrentTitle
FROM T_ORGANIZATION WHERE ORGID = v_OrgID;
IF v_Title <> '' THEN
IF v_Title = v_CurrentTitle THEN
SET v_MaxOrgID = v_CurrentOrgID;
BREAK;
END IF;
END IF;
IF v_ParentID IS NULL THEN
BREAK;
END IF;
END WHILE;
END IF;


SQL0104N 在 "_CurrentOrgID; " 后面找到异常标记 "BREAK"。预期标记可能包括:"SIGNAL"。 LINE NUMBER=29. SQLSTATE=42601
这个是报出来的错误。。
db2中还有哪些循环方式,请指教一下。
...全文
1095 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojianmi1 2011-01-05
  • 打赏
  • 举报
回复
百度搜with db2 递归
IORI__ 2011-01-05
  • 打赏
  • 举报
回复
马上结贴给分

再请教一个问题

with在什么地方可以用
我是接着上面的循环写了一个with做递归,但是报错,单独拿出来就不报错。
IORI__ 2011-01-05
  • 打赏
  • 举报
回复
谢谢了
zhaojianmi1 2011-01-05
  • 打赏
  • 举报
回复
loop1:
while ... do
......;
if ... then
leave loop1;
end if;
end while;
IORI__ 2011-01-05
  • 打赏
  • 举报
回复
LEAVE和LOOP我都没使用过
IORI__ 2011-01-05
  • 打赏
  • 举报
回复
code=SQL]WHILE 1 = 1 DO
SELECT ParentID,OrgID,TitleID
INTO v_ParentID,v_CurrentOrgID,v_CurrentTitle
FROM T_ORGANIZATION WHERE ORGID = v_OrgID;
IF v_Title = v_CurrentTitle THEN
SET v_MaxOrgID = v_CurrentOrgID;
BREAK;
END IF;
IF v_ParentID IS NULL THEN
BREAK;
END IF;
END WHILE;[[/code]
可以帮我把这一段修改一下吗,在现在的基础上,谢谢了
IORI__ 2011-01-05
  • 打赏
  • 举报
回复
是吧break替换成leave吗
wwwwb 2011-01-05
  • 打赏
  • 举报
回复
转:
循环控制Break,Continue在Db2用法?
答:在db2中 Break 转换为leave lab, Continue 转换为ITERATE lab
等同于GOTO语句
举例如下:
============== leave 例子
OPEN c1;
SET at_end = 0;
SET numrec = 0;
fetch_loop: 1
LOOP
FETCH c1 INTO proc_cusnbr, proc_cuscrd;
IF SQLCODE = 0 THEN
SET proc_cuscrd = proc_cuscrd * 1.2;
UPDATE ordapplib.customer
SET cuscrd = proc_cuscrd
WHERE CURRENT OF c1;
SET numrec = numrec + 1;
ELSE
LEAVE fetch_loop; 2
END IF;
END LOOP fetch_loop;
CLOSE c1;
============ iterate 例子
BEGIN
OPEN c1;
ins_loop: 1
LOOP
FETCH c1 INTO v_dept, v_deptname, v_admdept;
IF at_end = 1 THEN
LEAVE ins_loop;
ELSEIF v_dept = 'D11' THEN
ITERATE ins_loop; 2
END IF;
INSERT INTO sampledb02.deptnew (deptno, deptname, admrdept)
VALUES (v_dept, v_deptname, v_admdept);
END LOOP;
CLOSE c1;
END;
zhaojianmi1 2011-01-05
  • 打赏
  • 举报
回复
LEAVE
wwwwb 2011-01-05
  • 打赏
  • 举报
回复
1. While循环使用方法:

CREATE PROCEDURE ROCKY_WANG.P_WHILE
(OUT V_I INTEGER
)
LANGUAGE SQL
/*db2 数据库中循环语句while使用方法*/
p1: begin
declare i integer default 1;
while i<10 do
set i=i+1;
end while;
set v_i=i;
end p1;

2.Repeat循环使用方法:

CREATE PROCEDURE ROCKY_WANG.P_REPEAT
(OUT V_I INTEGER
)
LANGUAGE SQL
/* db2数据库中循环语句repeat使用方法*/
p1: begin
declare i integer default 1;
repeat_loop:
repeat
set i=i+1;
until i>=10
end repeat repeat_loop;
set v_i=i;
end p1;


3.Loop循环使用方法:

CREATE PROCEDURE ROCKY_WANG.P_LOOP
(OUT V_I INTEGER
)
LANGUAGE SQL
/* db2数据库中循环loop使用方法*/
p1: begin
declare i integer default 1;
fetch_loop:
loop
if i<10 then
set i=i+1;
else
leave fetch_loop;
end if;
end loop fetch_loop;
set v_i=i;
end p1;


4.For 循环使用方法:

CREATE PROCEDURE ROCKY_WANG.P_FOR_ACT
(OUT V_STR VARCHAR(3000)
)
LANGUAGE SQL
/*db2 数据库中循环for使用方法*/
p1: begin
set v_str='';
for v_emp as select ACTKWD from ROCKY_WANG.ACT do
set v_str=v_str||ltrim(rtrim(v_emp.actkwd))||';';
end for;
end p1;

5,891

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧