为什么我得到ORA-06592:在PL/SQL中执行CASE语句时找不到CASE?

Mar*_*nus 16 oracle plsql

我在PL/SQL中有以下CASE

        CASE
            WHEN v_line_item.custom_segment = 'CND1' THEN
                v_current_col := v_col_lcy_tps;
            WHEN v_line_item.custom_segment = 'CND2' THEN
                v_current_col := v_col_lcy_ib;
            WHEN v_line_item.custom_segment = 'CND3' THEN
                v_current_col := v_col_lcy_gm;
            WHEN v_line_item.custom_segment = 'CND4' THEN
                v_current_col := v_col_lcy_pb;
            WHEN v_line_item.custom_segment = 'CND5' THEN
                v_current_col := v_col_lcy_bb;
        END CASE;
Run Code Online (Sandbox Code Playgroud)

代码编译得很好,但是当我执行存储过程时,我得到以下错误:

ORA-06592:执行CASE语句时未找到CASE

所以当我删除CASE时; 存储过程将无法编译.我可以得到的唯一示例,在select语句中使用CASE,我不想在select语句中使用它,我想设置我的变量而不需要一堆IF THEN ELSE语句.

Sat*_*hat 33

如果您使用CASE语句 - - 下的列表CASE必须符合您可能遇到的所有条件 - 或者通过使用明确表示

WHEN v_line_item.custom_segment = 'CND1' THEN
            v_current_col := v_col_lcy_tps;
WHEN v_line_item.custom_segment = 'CND2' THEN
Run Code Online (Sandbox Code Playgroud)

或使用该ELSE条款.

您的代码遇到了v_line_item.custom_segment与任何给定CASE方案都不匹配的情况,因此Oracle引发了此异常.

你可以添加一个包罗万象的条件

ELSE
   -- do some work here, raise an exception or log it.
Run Code Online (Sandbox Code Playgroud)

这样它符合所有条件.

进一步阅读: