想问一下ORACLE能像JAVA程序那样写FOR循环么?
  比如我Java这样public static void ss() {
int a = 10;
int b = 20;
for (; b - a > 1; a++) {
System.out.println(1);
}
}    请问在ORACLE函数里如何实现上面的功能?谢谢。

解决方案 »

  1.   

    因为没有返回值,所以建一个procedurecreate or replace procedure ss
    is
      a number := 10;
      b number := 20;
    begin
    while (b - a > 1) loop
       dbms_output.put_line(1);
       a := a + 1;
    end loop;
    end;-- 执行
    execute ss;-- 输出结果
    1
    1
    1
    1
    1
    1
    1
    1
    1
      

  2.   

    begin
    dbms_output.put_line('打印倒三角形');
    for i in 1..9 loop
          for j in reverse i..9 loop     --reverse对值进行从大到小的循环
            dbms_output.put('*');
          end loop for_j;
            dbms_output.new_line;--用于在缓冲区中添加换行符
          end loop for_i;
    end; 
      

  3.   


    create or replace procedure ss
    is
      a number := 10;
      b number := 20;
    begin
    for i in a..b loop -- for循环, i从a到b,包括a和b
    dbms_output.put_line(i);
    end loop;
    end;execute ss;-- output
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      

  4.   

    -- 这几天者是在做循环的事情:set serveroutput on;
    DECLARE
      v_fromDAte VARCHAR2(10);
      v_toDate VARCHAR2(10);BEGIN
      v_fromDAte := '2009-04-30';
      v_toDate := '2009-05-07';
      WHILE v_fromDate <= v_toDate LOOP
        INSERT INTO holidays(cdate) values(v_fromDate);
        v_fromDate := to_char(to_date(v_fromDate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
      END LOOP;
      commit;
    END;
    /
      

  5.   

    -- 还是在做循环的事,都烦躁死啦:
    set serveroutput on;
    DECLARE
      v_fromDAte VARCHAR2(10);
      v_toDate VARCHAR2(10);  v_startNum NUMBER(18,0);
      v_allNum NUMBER(18,0);
      v_timesNum NUMBER(18,0);
      v_rate1 NUMBER(18,8);  V_rate_inc NUMBER(18,8);BEGIN
      delete from china_prod_tb1;
      v_fromDAte := '2007-05-18';
      v_toDate := '2010-06-30';
      v_rate_inc := 0.00007;
      v_startNum := 80;
      v_timesNum := 80;
      v_allNum := 0;
      WHILE v_fromDate <= v_toDate LOOP
        v_startNum := v_startNum + 9;
        IF ( to_char(to_date(v_fromDAte,'YYYY-MM-DD'), 'D')='1' OR to_char(to_date(v_fromDAte,'YYYY-MM-DD'), 'D')='7' ) THEN 
          SELECT dbms_random.value(0.93,1.135) INTO  v_rate1 FROM dual;
        ELSE
          SELECT dbms_random.value(0.88,1.128) INTO  v_rate1 FROM dual;
        END IF;    v_timesNum := v_startNum * (v_rate1 + v_rate_inc);
        IF v_timesNum < 80 THEN
          SELECT dbms_random.value(70,120) INTO v_timesNum FROM DUAL;
        END IF;
        v_allNum := v_allNum + v_timesNum;
        v_rate_inc := v_rate_inc + 0.000040;
        v_fromDate := to_char(to_date(v_fromDate,'YYYY-MM-DD')+1,'YYYY-MM-DD');
        INSERT INTO china_prod_tb1(cdate,proc_num) values(v_fromDate,v_timesNum);
        -- dbms_output.put_line(to_char(v_timesNum));
      END LOOP;
      dbms_output.put_line(to_char(v_allNum));
      commit;
    END;
    /
      

  6.   

    -- 接着游标循环:
    set serveroutput on;
    DECLARE
      v_cdate VARCHAR2(10);
      v_proc_num NUMBER(18,0);
      v_radom_rate NUMBER(18,6);
      v_charge_user NUMBER(18,0);  cursor c_ur is select t1.cdate, t1.proc_num from china_prod_tb1 t1;
    BEGIN  for r_ur in c_ur loop
        v_cdate := r_ur.cdate;
        v_proc_num := r_ur.proc_num;    if(  substr(v_cdate,6,2)='03' or substr(v_cdate,6,2)='04' ) then
          select dbms_random.value(0.45,0.65) into v_radom_rate from dual;
        else
          select dbms_random.value(0.55,0.80) into v_radom_rate from dual;
        end if;    v_charge_user := v_proc_num * v_radom_rate;    update china_prod_tb1 set charge_user =v_charge_user 
         where cdate=v_cdate;
      END LOOP;
      commit;
    END;
    /
      

  7.   


    /*
    public static void ss() {
      int a = 10;
      int b = 20;
      for (; b - a > 1; a++) {
      System.out.println(1);
      }
    }
    */--FOR
    DECLARE 
      a number := 10;
      b number := 20;
      count number := 0;
    BEGIN
      FOR count IN a..b LOOP
        DBMS_OUTPUT.PUT_LINE(1);
      END LOOP;
    END; --WHILE
    DECLARE 
      a number := 10;
      b number := 20;
      count number := 0;
    BEGIN
      WHILE a<b LOOP
        DBMS_OUTPUT.PUT_LINE(1);
        a := a+1;
      END LOOP;
    END; --LOOP
    DECLARE 
      a number := 10;
      b number := 20;
      count number := 0;
    BEGIN
      LOOP 
        IF a<b THEN
           DBMS_OUTPUT.PUT_LINE(1);
            a := a+1;
        END IF;
      END LOOP;
    END;