Oracle CASE 语句 - return 表达式值?

Oracle CASE statement - return expression value?

我想评估 CASE 语句的表达式(它是从函数 return 编辑的值),如果它不满足条件之一 return 表达式值本身.

例如:

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;

抛出异常时需要 'else' 案例。我可以将 returned 函数值分配给一个字符串并对其求值,但我不知道错误消息会持续多长时间。我宁愿即时处理字符串值,也不愿创建一个可以超过设定长度的变量。

有办法吗?

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

我假设你说的异常实际上是一个字符串。那正确吗?

无论如何,我认为您应该将函数的输出存储在 CLOB 类型的变量中,该变量的长度可能超过 200 万个字符。这样您就不会像在 varchar 类型的情况下那样将输出限制为 4000 个字符。

参见documentation on Oracle data types

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

如果你想迎合任何return值,那么看看函数被定义为returning,它可能是一个VARCHAR2。该值的最大大小为 32767,因此您可以确定您的函数永远不会 return 大于该值的值。