2017-12-31 176 views
0

행의 각 업데이트와 함께 행의 필드를 증가시키고 0에서 시작하는 H2에서 computedColumnExpression을 어떻게 정의 할 수 있습니까?H2 계산 된 열을 사용하여 행의 use-count 열을 자동으로 유지

음, 정의에 따르면 computedColumnExpression은 업데이트가 발생할 때마다 실행됩니다. 그러나

  • 방법 업데이트 된 행의 usecount 필드의 이전 값을 참조 할 수 있으며,
  • 에서는 초기 삽입 처리?

내가

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

하지만 나는 XXXX 사용해야 같은 열 정의로 시작하는 것?

트리거를 살펴본 결과 fire 메서드에서 newRow을 업데이트하는 것으로 생각했지만 효과가없는 것 같습니다.

첫 번째 대답과 실패한 시도를 감안할 때 이미 테이블이 존재하며 테이블 정의가 ALTER TABLE "data" ADD COLUMN이어야한다고 말하면됩니다. 나는 당신이 같은 선언을 사용할 수있는 차이 .- (

답변

1

하게 생각하지 않았을 :

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

을 ... 어디 오른쪽 usecount 참조 이전 값 그냥 행을 삽입합니다. 0 값을 삽입합니다.

insert into foo values (42, 0); 

... 자동 1에 값을 증가시킵니다

을 이미 표가있는 경우 다음 두 단계로 열을 추가 할 수 있습니다.

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