miau's blog?

SELECT 文 で NULL

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('', '') とかやって型合わせないとダメっぽい。

posted at 07:51:28 on 2004-04-07 by miau - Category: Work No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

miau wrote:

SQLServer だと普通に NULL を SELECT できるっぽい。
2004-04-11 11:06:32

miau wrote:

DB2 で SELECT できないのは NULL が型情報を持たないせいっぽい。
CAST(NULL AS INTEGER) とか CAST(NULL AS CHAR(5)) みたいに型を指定すればいけました。
2004-08-06 01:19:34

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。