我在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语句。
答案 0 :(得分:32)
如果您使用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.
以便它符合所有条件。
进一步阅读:
答案 1 :(得分:-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错误。