2012-02-16 6 views
0

のデフォルト値を使用すると、condional文とSET

例を扱うDEFAULTキーワードに何か問題があります:

次のようにSQLを実行
CREATE TABLE BAR(c1 int null,c2 int default 1 not null) 

: カラム:中

INSERT INTO BAR SET c1 = 1, c2 = COALESCE(null,DEFAULT) 

結果"DEFAULT"が見つかりません。 SQL文:C1 = 1、C2 = COALESCE(NULL、DEFAULT)BARセットに INSERT [42122から161] 42S22/42122

同時に:

INSERT INTO BAR (c1,c2) values (1, DEFAULT) 

OK!

しかし、

INSERT INTO BAR SET c1 = 1, c2 = DEFAULT 

結果: NULL列 "C2" のために許可されていません。 SQL文:BARセットに INSERT C1 = 1、C2 = DEFAULT [23502から161] 23502分の23502

私はそれはバグだと思います。そうでない場合は、 の使用を指定する方法はありますか?

H2 1.3.161(2011-10-28)

答えて

1

用語DEFAULT擬似列または式で使用することができる表現ではありません。 DEFAULTはの代わりにの式を使用しています。私はMySQLを試して、H2と同じように動作します。

drop table foo cascade; 
CREATE TABLE FOO(c1 int null,c2 int default 1 not null); 
INSERT INTO FOO SET c1 = 1, c2 = default; -- works 
INSERT INTO FOO SET c1 = 1, c2 = default * 2; -- doesn't work 

NULLはデフォルトに変換されるパラメータ化された文(右?)を使用します。 H2はこれをサポートしていますが、完全に文書化されていません。

drop table foo cascade; 
CREATE TABLE FOO(c1 int null,c2 int default 1 not null null_to_default); 
INSERT INTO FOO SET c1 = 1, c2 = null; 
+0

INSERT INTO BAR SET c1 = 1、c2 = DEFAULT; - H2で動作しません – Each

+0

MySQLにDEFAULT(column_name)コマンドがあります。 INSERT INTO BAR SET c1 = 1、c2 = coalesce(null、DEFAULT(c2)); サポートを追加できますか? – Each

+0

'INSERT INTO BAR SET c1 = 1、c2 = DEFAULT'は私のために働きます。それがあなたのために働かない場合は、完全なコード(テーブルの文を作成するなどを含む)を投稿してください。 'DEFAULT(c2)'は現在計画されていません。 –