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;

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

  • 相关阅读:
    脚本,网络配置,指令
    拦截TextBox 双击消息
    VB指针操作和消息钩子
    文件和文件夹操作
    常见反编译产生错误 k__BackingField 解决办法
    关机/重启/注销
    通用命名前缀
    语言区域代码
    常用数据库链接字符串
    用VB实现COM+组件配置
  • 原文地址:https://www.cnblogs.com/wildfish/p/1031943.html
Copyright © 2011-2022 走看看