【问题标题】:Why am I getting ORA-06592: CASE not found while executing CASE statement in PL/SQL?为什么在 PL/SQL 中执行 CASE 语句时出现 ORA-06592: CASE not found?
【发布时间】:2011-11-05 19:11:53
【问题描述】:

我在 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;

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

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

所以当我删除 CASE 时;存储的过程不会编译。我可以得到的唯一示例,在 select 语句中使用 CASE,我不想在 select 语句中使用它,我想在没有一堆 IF THEN ELSE 语句的情况下设置我的变量。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    老线程我知道,但你不会就这样写吗?

    v_current_col :=
        case v_line_item.custom_segment
            when 'CND1' then v_col_lcy_tps
            when 'CND2' then v_col_lcy_ib
            when 'CND3' then v_col_lcy_gm
            when 'CND4' then v_col_lcy_pb
            when 'CND5' then v_col_lcy_bb
        end;
    

    更简洁易读,不会出现 ORA-06592 错误。

    【讨论】:

    • 与问题无关。
    • 有点像。一方面,它避免了问题中报告的 ORA-06592 错误。
    【解决方案2】:

    如果您使用 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
    

    或使用ELSE 子句。

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

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

    ELSE
       -- do some work here, raise an exception or log it.
    

    使其匹配所有条件。

    延伸阅读:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多