私は次のコードを持っている: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';
..この1行は空白です。
ただし、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;
が、これはバグですか、前者が動作しなかった理由は、いくつかの理由がありますか? case
式がデフォルトにフォールスルーして、空(「」)値またはis NULL
私はそれもうまくいきませんでした。 – user3224907
がIS NULL – NikNik
@ user3224907で更新されました - Oracleでは 'NULL'と同じです。 (SQL標準に準拠していない...彼らの防衛の中では、「 ''についてのOracleのこと、そして標準が出る前にNULLが導入された。) – mathguy