sql/plus循环语句和异常处理


/*
  case语句
     语法1
       case 表达式
         when 条件 then 执行语句;
         、、、、
         else
           如果表达式都不满足when后面的条件,则执行else后面的执行语句,
           否则抛出异常
              名称:
              编号:ORA-06592:
              消息:执行 CASE 语句时未找到 CASE
       end case;
       例子:
        DECLARE
          v_num NUMBER := 10;
        BEGIN
          CASE v_num
           WHEN 1 THEN dbms_output.put_line('1');
           WHEN 2 THEN dbms_output.put_line('2');
           ELSE
            dbms_output.put_line('不符合以上所有条件');
           END CASE;
        END;
        /
       ------------------------------------------------
      语法2
         case
           when 逻辑表达式 then 执行语句;
           else
             执行语句(以上所有逻辑表达式不满足的情况下,执行该执行语句)
         end case;    
       举例说明
        DECLARE
         v_num NUMBER := 10;
        BEGIN
         CASE
          WHEN 3>6 THEN dbms_output.put_line('3>6成立');
          WHEN 3<6 THEN dbms_output.put_line('3<6成立');
          ELSE
           dbms_output.put_line('不满足以上所有条件');
         END CASE;
        END;
        /               
  循环语句
      1 
        loop
         exit when 条件;(满足条件之后跳出循环)
        end loop;       
        备注:关于退出循环有两种方式
           对于简单的条件可以直接使用exit when 条件 跳出循环
           对于某些复杂的条件 可以使用判断语句来跳出循环
             if 条件
               exit;
             end if;
      2 while 条件 loop
          执行语句
        end loop;
      3 for
       3.1 每次递增1
          for 变量名 in 1..10 loop;
            执行语句
            (
                  从1开始每次递增1,增加到10 退出循环
                 每执行一次 变量名自动增加1,如果你想设置每次循环增加2 在循环体中书写 k := k+1;这是错误的,
                  变量名不允许用户手动修改值,只能每次增加1.
             )
          end loop;
        3.2 每次递减1
          for 变量名 in reverse  1..10 loop;
            执行语句
            (
                  从10开始每次递减1 ,减到k为1的时候跳出循环
            )
          end loop;
  异常
   dbms_output.put_line(SQLCODE);--sqlcode得到异常编号
    dbms_output.put_line(SQLERRM);--得到异常消息
    分类:
    预定义异常、非预定义异常、自定义异常
    1 预定义异常
      oracle自己定义的。不需要我们自己定义,在应用程序中会自动抛出,然后在异常处理部分对异常进行处理
      例如:no_data_found 没有找到数据等异常就属于预定义异常
    2  非预定义异常
   
    3 自定义异常     
      自定义过程一般包括:定义异常、抛出异常和处理异常三个步骤
     3.1定义异常
       语法:异常名 exception --异常名是自己给该异常取的名字,可以随便定义,但是不能定义为系统异常(预定义异常)
     3.2 抛出异常
        根据自己设定的条件,如果不满足条件,则抛出异常
     3.3 处理异常
        在异常处理块中,捕获该异常并做出相应处理。  
     举例说明
       DECLARE
        myexception EXCEPTION;
      BEGIN
        IF 3<6 THEN
          RAISE myexception;--抛出异常用关键字raise
        END IF;
      EXCEPTION
       WHEN myexception THEN dbms_output.put_line('捕获自定义异常');
      END;
      /  
    4 异常编号和异常名绑定
    语法:   
     myexception EXCEPTION;
     PRAGMA exception_init(myexception,异常编号);
     DECLARE
       myexception EXCEPTION;
       PRAGMA exception_init(myexception,-20002);
    BEGIN
     IF 3<6 THEN
      RAISE myexception;
     END IF;
    EXCEPTION
      WHEN myexception THEN
      dbms_output.put_line(SQLCODE);--此时会打印myexception的错误编号:-20002
    END;
    / 
  5  抛出异常消息

DECLARE
 myexception EXCEPTION;
 PRAGMA EXCEPTION_INIT(myexception,-20002);
BEGIN
 IF 2<3 THEN
   RAISE_application_error(-20002,'我自定义的异常');
 END IF;
END;
/

 

    ----------------------------------
    备注:如果多个异常的处理办法一样,可以在一个捕获语句中捕获多个异常类型
        比如: when exception1 or exception2 then
                 执行语句
    
*/

oracle错误一览表:可以借鉴下别人的博客 ,博客地址:http://www.cnblogs.com/phoebus0501/archive/2011/05/23/2054075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值