Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查多个插入对象Postgresql中的值_Sql_Postgresql_Plpgsql - Fatal编程技术网

检查多个插入对象Postgresql中的值

检查多个插入对象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

我想做的是检查一天中的小时数是否高于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 &gt;=0 AND hours &lt;= 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

当然,您需要类似的更新

您可以使用约束检查其他行-您需要在此处触发抱歉,但我完全不介意,您能给我看一个示例吗?这不是我期望的,但给了我一个如何执行的想法,谢谢。