SELECT 文で NULL をベタ書きすると、エラーになってしまう。
(とりあえず DB2 でのお話。今ほかの DBMS 環境ないので。)
db2 => SELECT ID, VALUE, NULL FROM TEST
SQL0206N 使用されているコンテキストで、"NULL" は無効です。 SQLSTATE=42703
ということで、とりあえず NULLIF で対応。
db2 => SELECT ID, VALUE, NULLIF(0, 0) FROM TEST
ID VALUE 3
------------ ---------- -----------
1. aaa -
2. あああ -
ほかにいい方法ありますかね?
ちなみに、なんで NULL を選択する必要があるのかというと、INSERT INTO 〜 SELECT 〜 を動的に生成していて、条件分岐で NULL を挿入したいから。
char strFormat[] = "INSERT INTO TEST SELECT ID, VALUE, %s FROM TEST WHERE ID=%d";
sprintf(strSql, strFormat, (intSomeFlag) ? ("0") : ("NULLIF(0, 0)"), intId);
EXEC SQL EXECUTE IMMEDIATE :strSql;
あ。ちなみに CHAR やら VARCHAR の列の場合は NULLIF('', '') とかやって型合わせないとダメっぽい。