zoukankan      html  css  js  c++  java
  • Oracle

    1)Oracle在执行INSERT、DELETE、UPDATE以及SELECT语句的时候,其中更新删除都是先根据WHERE条件查找匹配的记录,然后返回受影响的行数。

      而SQL%FOUND、SQL%NOTFOUND【这两个用来检测之前的更新或删除是否有效很有用】可以检测最近一条语句返回受影响的结果。如下表  SELECT *  FROM  A

      

      执行如下语句,其中id为2的记录不存,但是程序并不会拋异常,ID为2返回结果0行数据被更新,才会执行IF条件中的语句

    BEGIN 
              FOR I IN 1..5 LOOP
              UPDATE A T SET T.PASSWORD='ROOT' WHERE T.ID=I;
              IF SQL%NOTFOUND THEN
                 DBMS_OUTPUT.PUT_LINE(I);
              END IF; 
              DBMS_OUTPUT.PUT_LINE('哈哈');
              END LOOP;
    END;

      执行结果如下:

    哈哈
    2
    哈哈
    哈哈
    哈哈
    哈哈

     2)Oracle的预定义异常有

      NO_DATA_FOUND  SELECT ..INTO..时没有找到数据

      DUL_VAL_ON_INDEX 试图在一个有唯一约束的列上存储重复值

      CURSOR_ALREADY_OPEN 试图打开一个已经打开的的游标

      TOO_MANY_ROWS SELECT ..INTO..时查询到多个值

      ZERO_DIVIDE 零被整除

      OTHERS 其他异常

      如下面的代码。

    DECLARE
       i NUMBER(20):=5;
       temp NUMBER(20);
       BEGIN 
              while i>= 0 loop
                    TEMP := 5/i;
                    DBMS_OUTPUT.PUT_LINE(i);
                    i:= i-1;
              end loop;
              DBMS_OUTPUT.PUT_LINE('123');
              EXCEPTION
              WHEN ZERO_DIVIDE THEN
                   DBMS_OUTPUT.PUT_LINE('0被整除!');
              WHEN OTHERS THEN
                   DBMS_OUTPUT.PUT_LINE('发生了其他异常!');
             
       END;

       程序执行结果如下

    5
    4
    3
    2
    1
    0被整除!

     

    分析:EXCEPTION捕获之前的所有语句,当循环到i=0的时候,执行 TEMP:=5/I的时候发生异常,直接执行异常处理语句,后面的语句都不再执行。

  • 相关阅读:
    echarts3.0 实例容器不实时更新页面的问题
    Mac下搭建atx2环境
    MAC 下SFT环境搭建及使用
    【转发】基本adbui命令使用 可做图像识别
    UIAutomator2的API文档(三)
    UIAutomator2的API文档(二)
    UIAutomator2的API文档(一)
    UIAutomator2安装及连接
    uiautomator2通过wifi操作手机
    ATX-UI自动化环境搭建
  • 原文地址:https://www.cnblogs.com/zplogo/p/8405059.html
Copyright © 2011-2022 走看看