XOR でペアのパラメータを処理する
MySQL のストアドを書いていて、入力パラメータのチェックで、「開始日」「終了日」みたいなパラメータがあって、「ペアになっていなかったらエラー」みたいな処理が必要でした。(開始日・終了日両方設定か、開始日も終了日もなし、みたいな感じ。開始日だけとか終了日だけはダメ。)
で、最初は
IF ( startDate IS NULL AND endDate IS NOT NULL ) OR ( startDate IS NOT NULL AND endDate IS NULL ) THEN エラー処理! END IF;
みたいに書いていました。でも、このペアが3つだか4つぐらいあるんだよね。テストコード書きつつも、「これじゃそのうち絶対間違えるなぁ。。。」と思って思案していたら、ふとひらめきました。
これって XOR(排他的論理和)じゃん!
XOR 使うとこんな感じです
IF ( startDate IS NULL XOR endDate IS NULL ) THEN エラー処理! END IF;
だいぶすっきりです。ペアのパラメータ有無のチェックには XOR なんですねぇ。Perl とか他の言語でも使えそうです。