ORA-01403: 未找到数据问题+存储过程循环跳转

本文介绍了一种解决ORA-01403错误的方法,通过添加异常处理并结合存储过程开发技巧,如循环跳转等,实现了数据一致性检查与更新。

    执行一个PL/SQL 块,总是报这个错:ORA-01403: 未找到数据问题,在网上搜索了半天,找到一个解决办法。

比较彻底的办法就是添加一个异常处理~

    另外,在其中还应用了存储循环跳转应用,很好地复习了存储过程开发!解决问题方法如下:

DECLARE
  vn_sum_old NUMBER(10);
  vn_sum_new NUMBER(10);
  vn_count NUMBER(10) := 0;

  cursor get_tcf is
  SELECT account_id AS acct_id,user_idnew AS user_id,perserve01 AS acct_item_type_id from table_a  
  where city_code='921'
  and fee_date='201107'
  and table_source = 0
  and perserve03 is null
  and disct_rule_id=211100278;
 
BEGIN
     for cur in get_tcf LOOP
        SELECT SUM(charge) INTO vn_sum_old
        FROM table_d
        WHERE acct_item_type_id =  cur.acct_item_type_id
        AND acct_id = cur.acct_id
        GROUP BY acct_id;
       
        BEGIN               --这是针对性异常处理的应用
            SELECT NVL(SUM(fee),0) INTO vn_sum_new
            FROM ucr_dtb1.table_c
            WHERE
              detail_item_code IN(
                SELECT new_item_code FROM table_b@to_accttst
                WHERE acct_item_type_id IN cur.acct_item_type_id
              )
            AND acct_id = cur.acct_id
            GROUP BY acct_id ;
        EXCEPTION
        WHEN no_data_found THEN
        --NULL;
        GOTO point1;  --这是循环跳转应用
        END;

        IF vn_sum_old = vn_sum_new THEN
           UPDATE table_a SET perserve03 = '............'
           WHERE
           perserve01 = cur.acct_item_type_id
           AND user_idnew = cur.user_id;
        END IF;
     
        IF vn_count = 100 THEN
           COMMIT;
           vn_count := 0;
        END IF;
        vn_count := vn_count+1;
       
        <<point1>>   --这是断点设置
        NULL;
       
     end loop;
    
     DBMS_OUTPUT.PUT_LINE(vn_count);

END ;
 

### ORA - 01403 未找到任何数据错误 ORA - 01403 错误通常在执行 SQL 查询时,预期能返回数据但实际上没有数据返回时出现。这通常发生在 `SELECT` 语句的 `WHERE` 子句过滤条件过于严格,或者表中本身就没有符合条件的数据。例如,以下 SQL 查询可能会引发该错误: ```sql SELECT column1 FROM table_name WHERE some_column = 'nonexistent_value'; ``` 要解决这个问题,可以在执行查询时进行异常处理。在 PL/SQL 中,可以使用 `EXCEPTION` 块来捕获 `NO_DATA_FOUND` 异常并进行相应处理。示例代码如下: ```plsql DECLARE v_column1 table_name.column1%TYPE; BEGIN SELECT column1 INTO v_column1 FROM table_name WHERE some_column = 'nonexistent_value'; EXCEPTION WHEN NO_DATA_FOUND THEN -- 可以在这里进行日志记录或其他处理 DBMS_OUTPUT.PUT_LINE('未找到符合条件的数据'); END; ``` ### ORA - 06512 在 RHDK_SIT.DK_CON_APPLY_WORKFLOW_PKG 的第 55 行和第 3 行报错 ORA - 06512 是一个错误堆栈跟踪信息,它指示错误发生的位置。在这个案例中,错误发生在 `RHDK_SIT.DK_CON_APPLY_WORKFLOW_PKG` 包的第 55 行和第 3 行。这个错误通常是由其他错误(如 ORA - 01403)引发的,并且会显示错误发生的调用栈。 要解决这个问题,需要检查 `RHDK_SIT.DK_CON_APPLY_WORKFLOW_PKG` 包中第 55 行和第 3 行的代码。通常,这两行代码可能包含了引发 ORA - 01403 错误的 SQL 查询。在找到查询语句后,按照上述处理 ORA - 01403 错误的方法进行修改,添加异常处理逻辑。 ### 总结 - 对于 ORA - 01403 错误,添加 `NO_DATA_FOUND` 异常处理逻辑。 - 对于 ORA - 06512 错误,检查错误堆栈指向的代码行,对其中可能引发 ORA - 01403 错误的查询添加异常处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值