我想要达到的目的是检查当天的小时数是否超过24小时。
例如: 我有实体时间与字段:
Integer id;
LocalDate date;
Integer hours;
现在我使用post方法添加新对象,例如: 我先添加一个:
id - 1
date - 22.08.2018
hours - 10
我添加第二个:
id - 2
date - 22.08.2018
hours - 10
我添加第一个(小时数现在高于24,所以我需要抛出异常)
id - 3
date - 22.08.2018
hours - 10
我已经拥有的东西:
<sql>
ALTER TABLE hours_worked ADD CONSTRAINT more_than24h CHECK (hours >=0 AND hours <= 24)
</sql>
但是这只会检查我是否一次添加超过24个。
答案 0 :(得分:1)
你可以使用约束来检查OTHER行 - 你需要在这里触发,例如insert:
t=# create table i (id int, h int);
CREATE TABLE
t=# insert into i values(1,10),(1,10),(2,23);
INSERT 0 3
t=# create or replace function fi() returns trigger as $$ begin
if (select sum(h)+NEW.h > 24 from i where id = NEW.id) then
raise exception '%','over 24 for '||NEW.id;
end if;
return NEW; end;
$$ language plpgsql
;
CREATE FUNCTION
t=# create trigger ti before insert ON i for each row EXECUTE PROCEDURE fi();
CREATE TRIGGER
t=# insert into i values(1,1);
INSERT 0 1
t=# insert into i values(1,1);
INSERT 0 1
t=# insert into i values(1,1);
INSERT 0 1
t=# insert into i values(1,1);
INSERT 0 1
t=# insert into i values(1,1);
ERROR: over 24 for 1
CONTEXT: PL/pgSQL function fi() line 3 at RAISE
当然你需要类似UPDATE