天天看點

ORACLE 循環語句

/*
      FOR x IN N..M LOOP
          EXP...
      END LOOP;
*/

DECLARE
        v_start NUMBER(2):=1;
        v_end NUMBER(2):=10;
        v_num NUMBER(2): = 10;
BEGIN
  FOR v_num IN REVERSE  1..10 LOOP--v_start*1 .. v_end*2 LOOP
    DBMS_output.put_line(v_num);
    --global.v_num := `99;
  END LOOP;
END;


/*
      WHILE 條件 LOOP
            EXP ...
            -- EXIT WHEN 條件
      END LOOP;
*/
DECLARE v_num NUMBER(10):=1;
BEGIN
  WHILE v_num<=10 LOOP
        DBMS_output.put_line(v_num);
        v_num := v_num +1;
        EXIT WHEN v_num = 4;
  END LOOP;
END;

/*
      FOR X IN (select ...) LOOP
          直接使用 x.字段
      END LOOP;
*/
DECLARE v_num NUMBER(10) :=1;
BEGIN
    FOR i IN (SELECT * from user_objects uo where rownum<20) LOOP
        DBMS_output.put_line(i.object_name||','||i.subobject_name);
    END LOOP;
END;

/*
        LOOP 
             EXIT WHEN 條件
             EXP...
        END LOOP;
*/
DECLARE
    v_num NUMBER(10) := 1;
BEGIN
    LOOP
        EXIT WHEN v_num >= 10 ;
        DBMS_OUTPUT.PUT_LINE(V_NUM);
        v_num := v_num + 1 ;
    END LOOP;
END;



/*
    嵌套循環 
        使用标号 <<标号名>>
*/
DECLARE
    RESULT INT;
BEGIN
    <<OUTER>>
    FOR I IN 1 .. 10 LOOP
        <<INNER>>
        FOR J IN 1 .. 100 LOOP
            RESULT := I * J;
                        DBMS_OUTPUT.PUT_LINE(to_char(i) || '*' || to_char(j) || ':' ||to_char(RESULT));
            EXIT OUTER WHEN RESULT = 100;
            EXIT WHEN RESULT = 50;
        END LOOP INNER;
        DBMS_OUTPUT.PUT_LINE(RESULT);
    END LOOP OUTER;
    DBMS_OUTPUT.PUT_LINE(RESULT);
END;








DECLARE v_num NUMBER(10):=1;
BEGIN
        EXECUTE IMMEDIATE 'select 100+'||100||' from dual' INTO v_num ;
        --COMMIT;
        DBMS_output.put_line(v_num);
END;