我有以下的代码:Oracle中有CASE语句的错误?
IF i.cd_ver IS NULL OR i.cd_ver = '0'
THEN
--Set value of v_cd_ver
v_cd_ver := CASE i.cd_ver
WHEN NULL
THEN '9'
WHEN '0'
THEN '10'
END;
END if;
“i”是在参照外部表光标找到记录。外部表中的值为NULL或空白:
SELECT cd_ver FROM table_xtl WHERE cd_id = '123';
..这返回一行空白。
但是,v_cd_ver
未按预期设置为'9'
。我的解决方法是使用IF THEN
声明,而且它的工作原理。为什么CASE
声明不能按预期工作?
UPDATE: 当我试图不要使用以下它的工作:
v_cd_ver := CASE
WHEN i.cd_ver IS NULL
THEN '9'
WHEN i.cd_ver = '0'
THEN '10'
END;
这是bug还是有一些原因,前者没有工作?
我做到了,那也没用。 – user3224907
更新为IS NULL – NikNik
@ user3224907 - 在Oracle中与NULL相同。 (SQL标准不兼容的......在他们的防守,约“”和NULL甲骨文的事情是之前有一个标准出台。) – mathguy