• 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中。






  • 相关阅读:
    浮起来的验证消息
    关于jQuery UI 使用心得及技巧
    如何制作好一个提交按扭我是个爱折腾的人
    ABAP自测试题一 沧海
    商务出现问题 沧海
    [转帖]Report painter 沧海
    准备ABAP认证 沧海
    Characteristics and Key figures In Report Painter 沧海
    有朋自远方来 沧海
    What are the layers of data description in R/3? 沧海
  • 原文地址:https://www.cnblogs.com/andy-wcl/p/3218130.html
Copyright © 2020-2023  润新知