• 循环语句:LOOP,WHILE和数字式循环


    一 简单循环

    1 语法:

      LOOP
          要执行的语句;
          EXIT WHEN <条件语句> --条件满足,退出循环语句
      END LOOP;

    2 例子:

    DECLARE
        int NUMBER(2) :=0;
    BEGIN
       LOOP
          int := int + 1;
          DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int);
          EXIT WHEN int =10;
       END LOOP;
    END;

    二 WHILE循环

    1 语法:

    WHILE <布尔表达式> LOOP
        要执行的语句;
    END LOOP;

    2 例子:

    DECLARE 
      x NUMBER :=1;
    BEGIN
       WHILE x<=10 LOOP
          DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x);
           x:= x+1;
       END LOOP;
    END;

    三 数字式循环

    1 语法:

    [<<循环标签>>]
    FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
      要执行的语句;
    END LOOP [循环标签];

    每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环

    2 例子:

    BEGIN
       FOR int  in 1..10 LOOP
           DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);
       END LOOP;
    END;

    CREATE TABLE temp_table(num_col NUMBER);
    DECLARE
        V_counter NUMBER := 10;
    BEGIN
       INSERT INTO temp_table(num_col) VALUES (v_counter );
       FOR v_counter IN 20 .. 25 LOOP
          INSERT INTO temp_table (num_col ) VALUES ( v_counter );
       END LOOP;
       INSERT INTO temp_table(num_col) VALUES (v_counter );
       FOR v_counter IN REVERSE 20 .. 25 LOOP
          INSERT INTO temp_table (num_col ) VALUES ( v_counter );
       END LOOP;
    END ;
    DROP TABLE temp_table;

    DECLARE
       TYPE jobids_varray IS VARRAY(12) OF VARCHAR2(10); --定义一个VARRAY数据类型
       v_jobids JOBIDS_VARRAY; --声明一个具有JOBIDS_VARRAY数据类型的变量
       v_howmany NUMBER; --声明一个变量来保存雇员的数量
    BEGIN
       --用某些job_id值初始化数组
       v_jobids := jobids_varray('FI_ACCOUNT', 'FI_MGR', 'ST_CLERK', 'ST_MAN');

       --用FOR...LOOP...END LOOP循环使用每个数组成员的值
       FOR i IN v_jobids.FIRST..v_jobids.LAST LOOP
       --针对数组中的每个岗位,决定该岗位的雇员的数量
          SELECT count(*) INTO v_howmany FROM employees WHERE job_id = v_jobids(i);
          DBMS_OUTPUT.PUT_LINE ( '岗位'||v_jobids(i)||
                           '总共有'|| TO_CHAR(v_howmany) || '个雇员');
       END LOOP;
    END;

    在While循环中嵌套loop循环

    /*求100至110之间的素数*/
    DECLARE
       v_m NUMBER := 101;
       v_i NUMBER;
       v_n NUMBER := 0;
    BEGIN
       WHILE v_m < 110 LOOP
          v_i := 2;
          LOOP
             IF mod(v_m, v_i) = 0 THEN
                v_i := 0;
                EXIT;
             END IF;
        
             v_i := v_i + 1;
             EXIT WHEN v_i > v_m - 1; 
          END LOOP;
          
          IF v_i > 0 THEN
             v_n := v_n + 1;
             DBMS_OUTPUT.PUT_LINE('第'|| v_n || '个素数是' || v_m);
          END IF;

          v_m := v_m + 2;
       END LOOP;
    END;

  • 相关阅读:
    CKeditor3.6.2 配置与精简
    CKEditor与CKFinder整合并实现文件上传功能
    实体关联关系映射:
    status pending状态
    wx:for
    小程序
    获取指定控件的值
    报表
    dataGridView 设置
    SQLite 的使用
  • 原文地址:https://www.cnblogs.com/rxhuiu/p/9108947.html
Copyright © 2020-2023  润新知