• Oracle中的for和while循环


    实例:

    begin
    for i in 51..500 loop
    delete from test t where t.date=to_date('2016-07-01', 'yyyy-MM-dd') and t.name like ('%'||i);-------oracle使用||作为连接符

    update test t set t.code=('TEXT-0000-2-'||lpad(1,3,'0')) ,t.name=replace(t.name,'3001','0000') where to_char(t.date,'YYYYMM')='201606';---------lpad补位函数、replace替换函数、to_char日期转换函数
    commit;
    end loop;
    end;

    有两种方式可以实现条件循环
    一、for  变量  in  开始数值...结束数值 loop     end loop;
    二、while 条件 loop       end  loop;

    loop的使用方式:
    一、X := 100;
      LOOP
        X := X + 10;
        IF X > 1000 THEN
          EXIT;
        END IF END LOOP;
        Y := X;
    二、 X := 100;
        LOOP
          X := X + 10;
          EXIT WHEN X > 1000;
          X := X + 10;
        END LOOP;
        Y := X;

    还有一个GOTO的使用,在后面的过程中会有的,用来产生错误日志。

    以下是一个非常简单的过程,用来熟悉循环的!

    create or replace procedure count_number is
      /*
      功能描述:计算计算出1到100的和
      t的值为和
      */

      i number(10);
      t number(10);

    begin
      /*
        i := 1;
        t := 0;
      --用while+loop实现
        /*begin
          while i <= 100 loop
            t := t + i;
            i := i + 1;
          end loop;
        end;
        */
      i := 1;
      t := 0;
      --用for实现

      begin
        for i in 1 .. 100 loop
          t := t + i;
        
        end loop;
      end;

    end count_number;

    for循环:
    [PL/SQL] 用For Loop 替代Cursor
    http://www.itwenzhai.com/data/2006/0523/article_9377.htm  
    http://blog.csdn.net/heyday/archive/2005/07/27/435804.aspx
    CURSOR FOR Loop
         FOR  employee_rec in c1  ---employee_rec直接用,不用提前定义
         LOOP
         total_val := total_val + employee_rec.monthly_income;
         END LOOP;
         当使用CURSOR FOR Loop时,不用我手工open cursor close cursor
    应用:
    begin
             FOR emm IN ( SELECT ro_site, ns_site, product_line, wh_type
                          FROM eis_hq_invhl_mail_data
                         WHERE report_type = 'Detailed' )
            LOOP
            DBMS_OUTPUT.put_line( emm.product_line );
                eis_hq_invhl_pkg.make_mail_detailed_data
                                            ( p_ro_site =>            emm.ro_site,
                                              p_ns_site =>            emm.ns_site,
                                              p_product_line =>       emm.product_line,
                                              p_wh_type =>            emm.wh_type,
                                              p_current_day =>        to_date('2005-11-07','yyyy-MM-dd') );
            END LOOP;
    end;
    存储过程DIY2----游标与循环 
    http://blog.csdn.net/brave1/archive/2005/06/08/390160.aspx  

    while循环:
    WHILE( i <= CEIL( LENGTH( p_clob_data ) / 4000 ))
        LOOP
            v_clob_data := TRIM( SUBSTR( p_clob_data,
                                         i * 4000,
                                         4000 ));
            DBMS_OUTPUT.put_line( SUBSTR( v_clob_data,
                                          0,
                                          255 ));
           
            i := i + 1;
        END LOOP;

  • 相关阅读:
    类和接口的区别
    ref 和out的区别
    重载 重写 多态区别
    UML种类与类的关系
    Window.open() 全攻略
    C#委托
    RT Diagnostics Routines
    tar.bz2 解压命令。
    教你10招最有效防电脑辐射方法
    预处理,编译, 优化, 汇编, 链接
  • 原文地址:https://www.cnblogs.com/thb-blog/p/7452372.html
Copyright © 2020-2023  润新知