zoukankan      html  css  js  c++  java
  • 如何在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;

  • 相关阅读:
    统计数据库表中记录数
    在水晶报表中写一个条件判断语句
    数据库范式
    动态控件的新思路
    连续打印问题的解决
    水晶报表中测试纸张的margins
    向报表中传递参数
    JS实现页面跳转
    在dos下访问ntfs
    时间和字符混合处理
  • 原文地址:https://www.cnblogs.com/linyijia/p/2079736.html
Copyright © 2011-2022 走看看