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

  • 相关阅读:
    WebSocket使用及优化(心跳机制与断线重连)
    JS案例:触底懒加载
    你知道近来年大火的DDD是如何兴起的吗?以及与微服务的关系
    Sql Server的Cross Apply用法
    跨域信息传递解决方案
    【转】理解字节序
    NATAPP优惠码
    <学习笔记>筛法
    <学习笔记>线性基
    【react + BizCharts】
  • 原文地址:https://www.cnblogs.com/q1104460935/p/8579977.html
Copyright © 2011-2022 走看看