• 如何在SQL中使用循环结构


    如何在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;

    例二:使用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;

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

  • 相关阅读:
    单例模式
    mysql之group_concat函数详解
    json中如何将key中的引号去掉
    show status,修改mysql用户密码 使用
    ThinkPHP连贯查询之子查询
    输入1-53周,输出1-53周的开始时间和结束时间
    Java编辑环境搭建
    Java语言简介
    html中iframe根据子页面内容动态修改高度
    JavaScript---通过正则表达式验证表单输入
  • 原文地址:https://www.cnblogs.com/wildfish/p/1031943.html
Copyright © 2020-2023  润新知