好学IT学院:IT信息技术分享交流平台
来源:www.hxw.red  作者:本站整理  发布时间:2009-02-12  ★★★加入收藏〗〖手机版
摘要:如何在UDB/400中运用SQL的循环结构处理数据业务呢?FOR,LOOP,WHILE,REPEAT作为UDB/400的一种内部循环控制,为此提供了可行的解决方案,它们能方便的用于遍历表中符合条件的每一行记录。下面分别举例说明:目的:更新e……

如何在UDB/400中运用SQL的循环结构处理数据业务呢?

FOR,LOOP,WHILE,REPEAT作为UDB/400的一种内部循环控制,为此提供了可行的解决方案,它们能方便的用于遍历表中符合条件的每一行记录。

下面分别举例说明:

目的:更新employee库,把所有北京籍员工的工资提高10%

示例一:使用FOR循环

--------------------------------------------
CREATE PROCEDURE QGPL/TEST_FOR
LANGUAGE SQL
BEGIN
FOR each_record AS
---cur01 CURSOR FOR
------SELECT * FROM code,salary,city from employee where city="Beijing"
---------DO
------------UPDATE employee
------------SET salary=salary * 1.1
------------WHERE CURRENT OF cur01;
ENDFOR;
END;

示例二:使用WHILE循环
---------------------------------------
CREATE PROCEDURE QGPL/TEST_WHILE
LANGUAGE SQL
BEGIN
DECLARE code_v char(10);
DECLARE salary_v integer;
DECLARE city_v char(20);
DECLARE at_end integer;

DECLARE C1 CURSOR FOR
---SELECT code,salary,city FROM employee WHERE city="Beijing";
OPEN C1;

SET at_end=0;
WHILE at_end = 0 DO
--FETCH C1 INTO code_v,salary_v,city_v;
--IF SQLCODE=0 THEN
------SET salary_v=salary_v*1.1;
------UPDATE employee SET salary=salary_v
---------WHERE CURRENT OF C1;
--ELSE
------SET at_end=1;
--END IF;
END WHILE;
CLOSE C1;
END;

示例三:使用LOOP循环

----------------------------------------
CREATE PROCEDURE QGPL/TEST_LOOP
LANGUAGE SQL
BEGIN
DECLARE code_v char(10);
DECLARE salary_v integer;
DECLARE city_v char(20);

DECLARE C1 CURSOR FOR
---SELECT code,salary,city FROM employee WHERE city="Beijing";
OPEN C1;
loop_label:
LOOP
- FETCH C1 INTO code_v,salary_v,city_v;
--IF SQLCODE=0 THEN
------SET salary_v=salary_v*1.1;
------UPDATE employee SET salary=salary_v
---------WHERE CURRENT OF C1;
--ELSE
------LEAVE loop_label;
--END IF;
END LOOP loop_label;
CLOSE C1;
END;

示例四:使用REPEAT循环

------------------------------------------------
CREATE PROCEDURE QGPL/TEST_REPEAT
LANGUAGE SQL
BEGIN
DECLARE code_v char(10);
DECLARE salary_v integer;
DECLARE city_v char(20);

DECLARE C1 CURSOR FOR
---SELECT code,salary,city FROM employee WHERE city="Beijing";
OPEN C1;

repeat_label:
REPEAT
--FETCH C1 INTO code_v,salary_v,city_v;
--IF SQLCODE=0 THEN
------SET salary_v=salary_v*1.1;
------UPDATE employee SET salary=salary_v
---------WHERE CURRENT OF C1;
--END IF;
--UNTIL SQLCODE<>0;
END REPEAT repeat_loop;
CLOSE C1;
END;

总结:四种循环结构实现的功能基本相同,用户可以根据自己的习惯选择使用。

详解SQL Server执行动态SQL两种正确方式
  动态SQL大家经常都会用到,它一般是根据用户输入或外部条件动态组合的SQL语句块。动态SQL能灵活的发挥SQL强大的功能、方便的解…
  • 好学触屏公众号虎力全开、杨帆起航!
  • 好学考试H5触屏版开放内测