2017/12/07
DECODE関数は、ある項目の値を元に条件分岐させるORACLE独自の関数です。
DECODE関数の解説と、よく似ている単純CASE式との比較をしていきます。
sponsored link
DECODE関数とは
DECODE関数は、ある項目の値を元に条件分岐させる関数です。
ORACLE独自の関数で、比較的よく使われている関数なので他のDBにリプレイスする際は注意が必要になります。
1 2 3 4 |
-- aがbの時cを設定し、一致する値がない時はdを設定 -- bとcのセットは、最低1つ指定し、ELSEは省略可能 -- ELSEを省略した場合で、一致する値がない時はNULLを設定します DEOCDE(a, b1, c1, b2, c2, d) |
以下具体的な使用例です。
1 2 3 4 5 6 7 8 9 10 |
SELECT gender ,DECODE(gender, '1', 'MAN', '2', 'WOMAN', 'UNKNOWN') gender_name FROM test_table ; GENDER GENDER_NAME ------- ----------- 1 MAN 2 WOMAN 3 UNKNOWN |
DECODE関数と単純CASE式の共通点
DECODE関数は、単純CASE式とほぼ同じ使い方が出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SELECT gender ,DECODE(gender, '1', 'MAN', '2', 'WOMAN', 'UNKNOWN') a ,CASE gender WHEN '1' THEN 'MAN' WHEN '2' THEN 'WOMAN' ELSE 'UNKNOWN' END b FROM test_table ; GENDER A B ------- ----------- ----------- 1 MAN MAN 2 WOMAN WOMAN 3 UNKNOWN UNKNOWN |
DECODE関数の方が簡潔に記述出来るため、比較的よく使われる傾向にあります。
また、GROUP BY句やORDER BY句への記述も、単純CASE式と同様に使うことが出来ます。
DECODE関数と単純CASE式の異なる点
よく似ているDECODE関数と単純CASE式ですが、異なる点もあります。
まず1つ目ですが、NULLの評価がDECODE関数は出来ますが、単純CASE式は出来ません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SELECT a ,DECODE(a, '1', 100, NULL, 200, 300) b ,CASE a WHEN '1' THEN 100 WHEN NULL THEN 200 ELSE 300 END c FROM test_table ; A B C - ------- ------- 1 100 100 2 300 300 200 300 |
2つ目、PL/SQLにおいてDECODE関数は使用出来ませんが、単純CASE式は出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-- DECODE関数(エラーとなる) CREATE OR REPLACE FUNCTION func_sample(a IN NUMBER) RETURN NUMBER IS BEGIN RETURN DECODE(a, 1, 100, 200); END; / -- 単純CASE式(問題なく使える) CREATE OR REPLACE FUNCTION func_sample(a IN NUMBER) RETURN NUMBER IS BEGIN RETURN CASE a WHEN 1 THEN 100 ELSE 200 END; END; / |
まとめ
ORACLEの独自関数ではありますが、DECODE関数は比較的よく使わている関数です。ごちゃごちゃしがちな条件分岐の際にも、きれいにコードがまとまりやすいです。
仕様を理解しておきましょう。
関連(CASE式)