异常在oracle plsql过程中找不到数据

安德鲁

我有一个程序SET_SUCCESSOR_KPI_STATUS,当我尝试运行此程序时,出现了异常Exception NO_DATA_FOUND in SET_SUCCESSOR_KPI_STATUS KPI_DEF_ID: 1000206由于这个例外,整个流程都被打乱了。该过程SET_SUCCESSOR_KPI_STATUS正在由另一个过程调用,如果该过程引发异常,则另一个过程将产生问题。我不确定是否有任何方法可以捕获此异常。当尝试使用KPI_DEF_ID此过程进行调用时,可能会返回值,或者它可能包含null,因为我找不到错误信息,因为未找到数据。如果我从此过程中删除异常处理并运行它,则它在其他一些过程中显示错误,但主要原因是此过程中。

PROCEDURE SET_SUCCESSOR_KPI_STATUS
-- PUBLIC
(
  IN_KPI_DEF_ID IN NUMBER DEFAULT 0
, IN_KPI_STATUS IN CHAR DEFAULT 'N'
, RET OUT Number
) IS

EV Number := 0;
SUCC Number := 0;
PARENTS_GREEN Number := 1;
SUCC_KPI_ACTIVE_INITIAL CHAR;
SUCC_KPI_ACTIVE_CURRENT CHAR;    
BEGIN   

SELECT KD.EVENT_ID INTO EV FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD WHERE KD.KPI_DEF_ID = IN_KPI_DEF_ID;   

BEGIN
SELECT E.EVENT_SUCCESSOR_ID INTO SUCC FROM RATOR_MONITORING_CONFIGURATION.EVENT_SUCCESSOR E JOIN RATOR_MONITORING_CONFIGURATION.EVENT IN_EVENT ON E.EVENT_ID = IN_EVENT.EVENT_ID WHERE E.EVENT_ID = EV;
EXCEPTION WHEN NO_DATA_FOUND THEN
SUCC := 0;
END;

WHILE SUCC > 0
LOOP
SELECT KPI_ACTIVE_CURRENT INTO SUCC_KPI_ACTIVE_CURRENT from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD WHERE KD.EVENT_ID =  SUCC;
SELECT KPI_ACTIVE_INITIAL INTO SUCC_KPI_ACTIVE_INITIAL from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD WHERE KD.EVENT_ID =  SUCC;

UPDATE RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD
SET KD.KPI_ACTIVE_CURRENT = CASE WHEN IN_KPI_STATUS = 'Y' AND (SELECT MONITORING.ARE_PARENTS_GREEN(KD.KPI_DEF_ID) FROM DUAL) = 1 AND SUCC_KPI_ACTIVE_CURRENT <> SUCC_KPI_ACTIVE_INITIAL THEN KD.KPI_ACTIVE_INITIAL WHEN IN_KPI_STATUS = 'N' AND (SUCC_KPI_ACTIVE_CURRENT <> SUCC_KPI_ACTIVE_INITIAL) THEN IN_KPI_STATUS ELSE KD.KPI_ACTIVE_CURRENT END,
KD.LAST_UPDATED_BY = 115,
KD.LAST_UPDATED_DATE = CURRENT_DATE
WHERE KD.EVENT_ID =  SUCC;

BEGIN
SELECT E.EVENT_SUCCESSOR_ID INTO SUCC FROM RATOR_MONITORING_CONFIGURATION.EVENT_SUCCESSOR E JOIN RATOR_MONITORING_CONFIGURATION.EVENT IN_EVENT ON E.EVENT_ID = IN_EVENT.EVENT_ID WHERE E.EVENT_ID = SUCC;
EXCEPTION WHEN NO_DATA_FOUND THEN
SUCC := 0;
END;

END LOOP;

RET := 1;

EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Exception NO_DATA_FOUND in SET_SUCCESSOR_KPI_STATUS KPI_DEF_ID: '||TO_CHAR(IN_KPI_DEF_ID));
RET := 1;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception OTHERS in SET_SUCCESSOR_KPI_STATUS KPI_DEF_ID: '||TO_CHAR(IN_KPI_DEF_ID));
RET := 0;
RAISE;

END SET_SUCCESSOR_KPI_STATUS;
托尼·安德鲁斯

您的某些select into语句已经NO_DATA_FOUND很好地处理了

BEGIN
SELECT E.EVENT_SUCCESSOR_ID INTO SUCC FROM RATOR_MONITORING_CONFIGURATION.EVENT_SUCCESSOR E JOIN RATOR_MONITORING_CONFIGURATION.EVENT IN_EVENT ON E.EVENT_ID = IN_EVENT.EVENT_ID WHERE E.EVENT_ID = EV;
EXCEPTION WHEN NO_DATA_FOUND THEN
SUCC := 0;
END;

但是其他人不是:

SELECT KPI_ACTIVE_CURRENT INTO SUCC_KPI_ACTIVE_CURRENT from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD WHERE KD.EVENT_ID =  SUCC;
SELECT KPI_ACTIVE_INITIAL INTO SUCC_KPI_ACTIVE_INITIAL from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD WHERE KD.EVENT_ID =  SUCC;

如果这些选择不能合法地返回任何行,那么您也需要处理NO_DATA_FOUND这些

BEGIN
   SELECT KPI_ACTIVE_CURRENT INTO SUCC_KPI_ACTIVE_CURRENT
   from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD
   WHERE KD.EVENT_ID =  SUCC;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
     -- Do what?
     NULL;
END;

BEGIN
   SELECT KPI_ACTIVE_INITIAL INTO SUCC_KPI_ACTIVE_INITIAL
   from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD
   WHERE KD.EVENT_ID =  SUCC;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
     -- Do what?
     NULL;
END;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

oracle存储过程中找不到数据错误

来自分类Dev

异常在 oracle 中执行立即插入不起作用

来自分类Dev

过程中的 PLSQL Oracle 游标

来自分类Dev

如何显示在Oracle plsql的异常块中找不到其数据的员工编号

来自分类Dev

JavaScript异常在承诺链中丢失

来自分类Dev

JavaScript异常在承诺链中丢失

来自分类Dev

异常在C ++中如何工作?

来自分类Dev

异步任务中的异常在Visual Studio中被拦截

来自分类Dev

为什么强制转换异常在Java中是致命的?

来自分类Dev

让异常在调用堆栈中向上移动的意义是什么?

来自分类Dev

未捕获的异常在线程中的行为如何?

来自分类Dev

运行->异常在Mono Develop 5.7中不可用

来自分类Dev

Twilio异常在Codeigniter中给出错误

来自分类Dev

DialogFragment.onDismiss()空指针异常在Kotlin中

来自分类Dev

开发异常在生产环境中显示

来自分类Dev

空指针异常在opencv中写入图像时

来自分类Dev

空指针异常在Android Studio中运行连接的测试

来自分类Dev

如何从oracle中的存储过程中打印出数据

来自分类Dev

如何在Oracle存储过程中获取游标数据

来自分类Dev

在捕获块中抛出异常会导致两个异常在飞行吗?

来自分类Dev

找不到数据异常

来自分类Dev

在Oracle中触发:找不到数据

来自分类Dev

Oracle:过程中的游标

来自分类Dev

HashSet Null指针异常在Android中,但在Java中不会发生。为什么?

来自分类Dev

Camel Jpa Hibernate属性访问异常在Karaf Container中重新启动捆绑包之后

来自分类Dev

CRecordset :: GetFieldValue异常在C ++多线程中“字段上的GetFieldValue操作失败...”

来自分类Dev

ribbon.Invalidate Null异常在C#VSTO加载项中

来自分类Dev

服务器中不支持嵌套事务的JasperReports异常在localhost中正常运行

来自分类Dev

Camel Jpa Hibernate属性访问异常在Karaf Container中重新启动捆绑包之后

Related 相关文章

  1. 1

    oracle存储过程中找不到数据错误

  2. 2

    异常在 oracle 中执行立即插入不起作用

  3. 3

    过程中的 PLSQL Oracle 游标

  4. 4

    如何显示在Oracle plsql的异常块中找不到其数据的员工编号

  5. 5

    JavaScript异常在承诺链中丢失

  6. 6

    JavaScript异常在承诺链中丢失

  7. 7

    异常在C ++中如何工作?

  8. 8

    异步任务中的异常在Visual Studio中被拦截

  9. 9

    为什么强制转换异常在Java中是致命的?

  10. 10

    让异常在调用堆栈中向上移动的意义是什么?

  11. 11

    未捕获的异常在线程中的行为如何?

  12. 12

    运行->异常在Mono Develop 5.7中不可用

  13. 13

    Twilio异常在Codeigniter中给出错误

  14. 14

    DialogFragment.onDismiss()空指针异常在Kotlin中

  15. 15

    开发异常在生产环境中显示

  16. 16

    空指针异常在opencv中写入图像时

  17. 17

    空指针异常在Android Studio中运行连接的测试

  18. 18

    如何从oracle中的存储过程中打印出数据

  19. 19

    如何在Oracle存储过程中获取游标数据

  20. 20

    在捕获块中抛出异常会导致两个异常在飞行吗?

  21. 21

    找不到数据异常

  22. 22

    在Oracle中触发:找不到数据

  23. 23

    Oracle:过程中的游标

  24. 24

    HashSet Null指针异常在Android中,但在Java中不会发生。为什么?

  25. 25

    Camel Jpa Hibernate属性访问异常在Karaf Container中重新启动捆绑包之后

  26. 26

    CRecordset :: GetFieldValue异常在C ++多线程中“字段上的GetFieldValue操作失败...”

  27. 27

    ribbon.Invalidate Null异常在C#VSTO加载项中

  28. 28

    服务器中不支持嵌套事务的JasperReports异常在localhost中正常运行

  29. 29

    Camel Jpa Hibernate属性访问异常在Karaf Container中重新启动捆绑包之后

热门标签

归档