zoukankan      html  css  js  c++  java
  • oracle 错误收集

    create table mytable (
    id number(2),
    name varchar2(5))

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

    DECLARE

    flag NUMBER(2);
    BEGIN
    SELECT 1 INTO flag FROM mytable WHERE ID = 12;
    IF flag = 1 THEN
        dbms_output.put_line('记录12存在');
    ELSE
        dbms_output.put_line('记录12不存在');
    END IF;

    END;



    这段匿名块可能报2个错误

    ORA-01403: 未找到任何数据
    ORA-06512: 在 line 4

    当mytable记录真的不存在的时候,程序会抛出异常ORA-01403。

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

    insert into mytable values(1,'andy');

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

    再执行匿名块,输出"记录12存在"

    重复插入记录

           ID    NAME
    1    12    andy
    2    12    andy

    再执行匿名块,会报

    ORA-01422: 实际返回的行数超出请求的行数
    ORA-06512: 在 line 4

    这是程序逻辑的一部分,不管在表mytable中是否能找到记录,都能给我一个明确的答复,然后程序继续执行下去。

    为力规避上述2个常见错误

    尝试一下方法:

    1,使用函数

    DECLARE
      FLAG NUMBER(2);
    BEGIN
      SELECT MAX(1) INTO FLAG FROM MYTABLE WHERE ID = 12;
      IF FLAG = 1 THEN
        DBMS_OUTPUT.PUT_LINE('记录12存在');
      ELSE
        DBMS_OUTPUT.PUT_LINE('记录12不存在');
      END IF;
    END;

    无记录时flag为空,有记录时只取一条;


    2,使用异常处理

    DECLARE
      FLAG NUMBER(2);
    BEGIN
      SELECT 1 INTO FLAG FROM MYTABLE WHERE ID = 12;
      IF FLAG = 1 THEN
        DBMS_OUTPUT.PUT_LINE('记录12存在');
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('记录12不存在');
    END;


    3,有人提出判断记录存不存在,为何不直接用count;

    因为特殊情况,我这里要判断的是一个日志表,里面不但要有数据,还要获得执行结果的状态码,是异常,还是执行成功,这个时候用count是不能达到预期效果。


    SELECT INTO 是隐式游标,只能传一个内容进去







    thanks here

    http://www.itpub.net/thread-859456-1-1.html


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

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

    ORA-00918: 未明确定义列的错误


    INSERT 时候 values 里的列不确定,常见于merge into后面的insert中。






  • 相关阅读:
    Struts学习之手动验证
    Struts学习之文件上传
    Struts学习之模型驱动
    Struts学习之类型转换
    Struts学习之自定义拦截器
    Java基础之"=="和 和 equals 方法的区别
    Hadoop学习之Hadoop案例分析
    Hadoop学习之Hadoop集群搭建
    Hadoop学习之自定义二次排序
    Hadoop学习之Mapreduce执行过程详解
  • 原文地址:https://www.cnblogs.com/andy-wcl/p/3218130.html
Copyright © 2011-2022 走看看