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






  • 相关阅读:
    [NOI2019] 回家路线
    [NOIP2016] 天天爱跑步
    [CF1187D] Subarray Sorting
    [THUPC2018] 弗雷兹的玩具商店
    [AGC006C] Rabbit Exercise
    [AGC005F] Many Easy Problems
    [51Nod2558] 选址
    [BZOJ3771] Triple
    [APIO2019] 奇怪装置
    [CTSC2018] 假面
  • 原文地址:https://www.cnblogs.com/andy-wcl/p/3218130.html
Copyright © 2011-2022 走看看