Oracle CASE语句 - 返回表达式值?

时间:2016-08-29 19:58:09

标签: oracle plsql case-statement

我想评估CASE语句的表达式(这是函数返回的值),如果它不满足其中一个条件,则返回表达式值本身。

例如:

CASE UPDATE_RECORDS_F(party_number)
WHEN 'ONE_RECORD_UPDATED' THEN RETURN 'OK';
WHEN 'MULTIPLE_RECORDS_UPDATED' THEN RETURN 'OK_MULTIPLE';
ELSE RETURN (expression value);
END CASE;

'其他'抛出异常时需要case。我可以将返回的函数值分配给字符串并对其进行评估,但我不知道错误消息可能有多长。我宁愿动态处理字符串值,而不是创建一个可能超出设定长度的变量。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:1)

如果抛出异常,则返回值未定义,异常将通过代码传播,直到找到适当的异常处理程序或将其返回给客户端。

如果您想要满足任何返回值,那么请查看函数定义为返回的内容,这可能是VARCHAR2。最大大小为32767,因此您可以确定您的函数永远不会返回大于该值的值。

答案 1 :(得分:0)

我首先想到的是修改你的UPDATE_RECORDS_F函数,以便捕获任何异常并返回一个预定义的字符串,以便你可以在case语句中检测它。您不需要分配实际的异常字符串。当你的函数掉到异常块时,只需返回你想出的东西。

答案 2 :(得分:0)

我认为你所说的异常实际上是一个字符串。是对的吗?

无论如何,我相信你应该将函数的输出存储在CLOB类型的变量中,该变量的长度可能超过2百万个字符。这样,您就不会将输出限制为4000个字符,就像varchar类型一样。

请参阅documentation on Oracle data types