【问题标题】:How to handle expection raised from CURSOR declaration如何处理从 CURSOR 声明引发的异常
【发布时间】:2016-05-22 06:22:29
【问题描述】:

所以我在下面有一个接受日期作为 IN 参数的程序。如果传入了错误类型的参数,异常区域将无法捕捉到它,因为该参数是在 CURSOR 声明部分使用的。

PROCEDURE ABC(p_date IN DATE)
IS
  CURSTOR cur
  IS 
    SELECT *
    FROM table
    WHERE table.date = TRUNC(p_date);
BEGIN
do something;
EXCEPTION
   WHEN OTHERS THEN
   do something;
END;

如果用户传递了错误的参数类型:

BEGIN
ABC(123);
END;

我会收到“调用 'ABC' 时参数的数量或类型错误”错误。

在这种情况下有没有办法处理这个错误?

【问题讨论】:

  • 错误不是出现在游标中,而是在调用过程时出现。您的 proc 接受 DATE,但您将 NUMBER 传递给它。转换编号->日期失败 - 因此出现错误
  • 谢谢。是不是说传入了错误的参数,就没有办法处理异常了?
  • 它没有。你总是可以处理调用过程的异常。

标签: plsql


【解决方案1】:

Micklesh 是正确的。调用过程中的错误不是被调用过程处理的,需要在调用过程中处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多