我在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)
这样它符合所有条件.
进一步阅读: