2009/01/19

[oracle]where句でnullを扱う場合

一般的にoracleの場合、whereを使う時に注意しなければならないことが。

例えば、下のようなカラムがあったとします。

hoge_column
-----------
null
-----------
apple
-----------
orange
-----------

nullの場合のデータを取得したい場合、where hoge_column is nullとすればいいのですが、pl/sqlのカーソルでhoge_columnを取得し、他のカラム(例えば、foo_column、このカラムもnullを含む)と一致したデータを表示したい場合は、
where hoge_column = foo_column

と、書いてしまうと、何も取得できません。
というか、似たようなソースを書いたら取得できませんでした。

どーやら、hoge_columnにnullを含んでしまっているからで、この場合、
where nvl(hoge_column,'任意の値') = nvl(foo_column,'任意の値')

とすることで、上の問題を回避できるみたいです。

両方のカラムにnullを含んでしまう場合は、注意したいです。

久しぶりの、oracleネタでした。

1 件のコメント:

  1. 通常、nullを含む列での結合は考えません。
    そのようなテーブル設計が望ましくないです。
    正規化すべきところかもしれませんね。

    返信削除