2017-12-31 171 views
0

行の各更新で行のフィールドをインクリメントしてゼロから開始する、computedColumnExpressionをH2で定義する方法を教えてください。H2計算された列式で自動的に行の使用カウント列を維持する

さて、定義によって、computedColumnExpressionは更新が行われるたびに実行されます。しかし

  • はどのように更新された行のusecountフィールドの前の値を参照することが可能と
  • は、最初の挿入がどのように扱われますか?

私は

"usecount" INT4 (1+(SELECT IFNULL("usecount",0) from "data" WHERE ID=XXXX)) 

などのカラム定義で始めるでしょうが、私はXXXXのために何を使うべきでしょうか?

私はトリガーを見て、メソッドでnewRowを更新するだけと考えましたが、これは何の効果もないようです。

最初の回答と失敗した試行では、テーブルがすでに存在し、テーブル定義がALTER TABLE "data" ADD COLUMNである必要があることに言及する必要があります。私はそれが違いを作ることを考えていないでしょう.-(

答えて

1

をあなたはこのような宣言を使用することができます。右端のusecountは、以前の値を参照する

create table foo (pk int primary key, 
        usecount int as usecount + 1); 

を...あなたが行を挿入するときだけ0値を挿入します。

insert into foo values (42, 0); 

...自動的1に値をインクリメントします

を既にテーブルがある場合は、2つのステップで列を追加できます。

alter table foo add column usecount int default 0; 
alter table foo alter column usecount int as usecount + 1; 
+0

はい、これは機能します。それ以外は、 'ALTER TABLE"データ "ADD COLUMN"で動作しないようです。申し訳ありませんが、私はこれが違いを生むとは考えていませんでした。編集:-( – Harald

+0

を参照してください。回避策を使って 'ALTER TABLE'の問題を解決する方法を更新しました! –

+0

これは最終的にうまくいきました。私はこれを試したと思っていましたが、別の間違いをしたに違いありません。 「as」構文が公式にここに掲載されていないので、まったく動作します:http://www.h2database.com/html/grammar.html#alter_table_alter_column、または何か不足していますか? – Harald

関連する問題