如何在SQL中使用循环结构
解答 FOR,LOOP,WHILE,REPEAT是UDB/400的一种内部循环控制,用于遍历表中符合条件的每一行记录。
例一:使用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;
例二:使用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;
例三:使用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;
例四:使用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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/186993.html