Database JUNKY

MySQL,MariaDBを中心としたブログです

DB2 NOT NULL列に空値ははいります

DB2は、NOT NULL 列に対して空値が入ります。DB2の仕様ですね。他のDBは知らんです。 NULLと空値は、別ものとして扱われますので注意が必要です。

テスト用のテーブルを作ってみる。

$ db2 "create table test.tab1 (id char(2) not null,detail char(20) not null)" DB20000I  SQL コマンドが正常に完了しました。

両方に''(空値)を設定してみる。

$ db2 "insert into test.tab1 values('','')" DB20000I  SQL コマンドが正常に完了しました。

両方文字を入れてみる。

$ db2 "insert into test.tab1 values('01','1234567890')" DB20000I  SQL コマンドが正常に完了しました。

これは、エラーになります。

$ db2 "insert into test.tab1 values(NULL,'1234567890')" DB21034E  コマンドが、有効なコマンド行プロセッサー・コマ ンドでないため、 SQL ステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0407N  NULL 値の NOT NULL 列 "TBSPACEID=3, TABLEID=18, COLNO=0" への代入は許されていません。  SQLSTATE=23502

余談ですが、DB2には、

COALESCE

という関数がございます。詳しくは、 http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_bif_coalesce.htm

あたりを参照いただくとして、ようは、下記通り、

SELECT * FROM GRADES      WHERE COALESCE(SCORE1,0) + SCORE2 > 100;

※SCORE1が、NULLの場合は、0 (ZERO)として評価するみたいな感じの時に利用できます。集計を行うときなんかに重宝するかもしれません。(まあ、NULLを許可している。数値カラムがある時点で問題といえば問題ですが。。)