|
■No8681 (大塚松治 さん) に返信 > もっと良い方法があるような気もします。
SQL に COALESCE( or NVL だっけ?) 使うとか?
NULL 許可なフィールドは NULL チェックするのが当然でしょう。
DBに格納されている「値」がプログラムにとって認識しておく必要が無いことが明白である場合に限り、 SQL側で プログラム側に NULL が来ないように加工して渡すことは許されるケースはあります。 ただ、加工(この場合は代替文字へ置き換え)ですから、データ改竄にあたることは注意する必要があります。
COALESCE は、可変引数で2個以上持ちます。1個目から NULL 判定していき、NULL じゃ無い最初の項目 を返却します。
ですので、君のプログラムの場合、最終的に、INT に変換する「数字の文字列」なので、 COALESCE(A.NUM_VALUE, '0') としておけば、とりあえず、A.NUM_VALUE が NULL でも、 最悪、INT へのコンバート時には、代替文字列の "0" が変換されるようになります。 よくあるケースでは、表の表示用に、 COALESCE(A.NUM_VALUE, '値なし') COALESCE(A.NUM_VALUE, 'データなし') COALESCE(A.NUM_VALUE, '*') 等ですね。
大抵、DBでNULL許可項目にはそれなりに意味があるので、単に「テーブルスペースがもったいない」 理由の場合には、代替文字で置換してしまうのが普通かと。プログラムで素直に NULL チェックする のも王道ですけどね。
DBに入れるデータはプログラムからですが、SQL自身がそのデータを改竄してもOKかどうかは 設計によってまちまちですから、君の上に人が居るならば素直に聞いてみた方がいいですよ。
|