DB/Oracle/PLSQL/分岐
目次†
処理を条件によって分岐させる。いわゆる IF 文と CASE 文。
IF 文†
IF 文による分岐。ほかの言語と一緒なので説明するほどのものでもないなあという印象。
- IF 文の記述
declare hoge number := 10; begin -- IF 文開始 if hoge > 100 then ... -- 複数条件の場合は ELSIF で並べる elsif hoge > 50 then ... -- すべて合致しなかったらこれを実行 else ... -- IF 文終了 end if; end;
CASE 文†
CASE 文による分岐。ほかの言語と一緒なので説明するほどのものでもないなあという印象。
CASE 式と CASE 文があるらしい。値の代入に使うのが CASE 式、処理の分岐に使うのが CASE 文。
CASE 式†
値を代入するときに使う。
- CASE 式
declare hoge number := 1; fuga varchar2(10); begin -- hoge の値に応じて fuga に代入する値を変える fuga := case hoge when 1 then 'foo' when 2 then 'bar' else 'baz' end; -- 別の書き方。when にはブール値を返す判定式を自由に書ける fuga := case when hoge = 1 then 'foo' when hoge = 2 then 'bar' else 'baz' end; end;
CASE 文†
IF 文と同じことを CASE 文でもかける。たぶん IF 文のが一般的。
- CASE 文
declare hoge number := 1; begin case hoge when 1 then ... when 2 then ... else ... end case; end;
NULL 値の扱い†
NULL 値との単純な比較(大なり、小なり、イコールなど)は常に結果は NULL になる。TRUE でも FALSE でもなくて NULL。
論理演算の場合はちょっと複雑。
NULL になった場合、その条件の場合の実行文は実行されない。
NULL の単純比較†
大小比較、等値比較などの単純な比較の場合、結果は常に NULL になる。IF 文や CASE 文で判定結果が NULL だった場合、その部分は実行されない。制御の上では扱いは FALSE と同じ。
- NULL の例
declare hoge number; begin -- hoge は NULL if hoge > 100 then -- ここは実行されない ... else -- 今回の場合はここが実行される ... end if; end;
NULL の論理演算†
TRUE と FALSE と NULL とを AND とか OR で演算したらどうなるのという話。
- AND 論理演算
AND T F N T T F N F F F F N N F N
- OR 論理演算
OR T F N T T T T F T F N N T N N
- NOT 論理演算
NOT T F F T N N
基本的な考え方は以下の通り。
- AND 条件では FALSE が優先。OR 条件では TRUE が優先
- AND は両方 TRUE のときのみ TRUE
- OR は両方 FALSE のときのみ FALSE
Last-modified: 2011-11-08 (火) 10:39:12