• oracle学习--循环语句


                                   oracle学习--循环语句 


    loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i+1; dbms_output.put_line(i); if i>5 then exit; end if; end loop; end pro_test_loop;

    while循环:
    create or replace procedure pro_test_while is
    i number;
    begin
    i:=0;
    while i<5 loop
      i:=i+1;
      dbms_output.put_line(i);
    end loop;
    end pro_test_while;

    for循环1:
    create or replace procedure pro_test_for is
    i number;
    begin
    i:=0;
    for i in 1..5 loop
      dbms_output.put_line(i);
    end loop;
    end pro_test_for;

    for循环2:
    create or replace procedure pro_test_cursor is
    userRow t_user%rowtype;
    cursor userRows is
    select * from t_user;
    begin
    for userRow in userRows loop
        dbms_output.put_line(userRow.Id||','||userRow.Name||','||userRows%rowcount);
    end loop;
    end pro_test_cursor;

    ------------------------------------

    跳出循环:

    有时候编写Oracle中用游标等信息去循环处理逻辑的时候,对EXIT、RETURN、CONTINUE很容易搞混淆,网上搜了资料也不是很清楚,所以本人自己写了一小段代码测试了这三种用法。案例代码如下:

      BEGIN
        FOR MY_CU IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
          FOR MY IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
            IF MY_CU.SPBH = 'AAA' THEN
              RETURN;
              --exit;
              --continue;
            ELSIF MY.SPBH = 'BBB' THEN
              INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('123', '123');
            ELSE
              INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('222', '222');
            END IF;
            INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('333', '333');
          END LOOP;
        END LOOP;
        INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('444', '444');
      END P_TASK;

      

    案例测试得到结果如下(分析的结果中注意本次循环和本循环的区别。本次循环是本循环执行的这次循环):

    第一种:使用RETURN的时候,直接跳出存储过程或者函数

    第二种:使用EXIT的时候,跳出本循环转而执行本循环的上一级循环的下一次循环。就此案例而言MY_CU.SPBH = 'AAA'为真的时候,直接跳出MY循环转而去执行MY_CU的下一次循环

    第三种:使用CONTINUE的时候,本次循环后面的代码部分不再执行,转而执行本循环的下一次循环。就此案例而言MY_CU.SPBH = 'AAA'为真的时候,后面的代码不执行,继续MY的下一次循环

    努力赚钱  

    欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
  • 相关阅读:
    Java 程序员常用的 22 个Linux命令
    20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档
    Python学习笔记:Flask-Migrate基于model做upgrade的基本原理
    20180821 Python学习笔记:如何获取当前程序路径
    网络编程之 keepalive(zz)
    java socket编程中backlog的含义(zz)
    20170814 新鲜:EChart新增了日历图,要想办法用起来
    Canvas 和 SVG 的不同
    androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法
    Android support 26.0.0-alpha1 产生的问题(zz)
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/4158711.html
Copyright © 2020-2023  润新知