检查多个插入对象Postgresql中的值
我想做的是检查一天中的小时数是否高于24小时 例如: 我有一个关于字段的实体小时:检查多个插入对象Postgresql中的值,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我想做的是检查一天中的小时数是否高于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
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行。您可以使用约束检查其他行-您需要在此处触发,例如插入:
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
当然,您需要类似的更新您可以使用约束检查其他行-您需要在此处触发抱歉,但我完全不介意,您能给我看一个示例吗?这不是我期望的,但给了我一个如何执行的想法,谢谢。