我有一个包含日历的数据库。根据我尝试插入的组,应检查NEW
启动时间是否晚于组的旧启动时间。
我在考虑这样的事情:
CREATE OR REPLACE FUNCTION check_rooster_tijd() returns trigger AS $BODY$
BEGIN
SELECT max(eindtijd) FROM rooster WHERE rooster.groep = NEW.groep;
RETURN new;
END;
$BODY$
CREATE trigger check_rooster_tijd_trigger BEFORE INSERT or UPDATE ON rooster
FOR EACH ROW EXECUTE PROCEDURE check_rooster_tijd();
然而这不起作用。
我如何解决这个问题,以便我的sql检查时间是否晚于他结束同一组的时间。
CREATE TABLE rooster(
groep VARCHAR(20) NOT NULL
,startdatum DATE NOT NULL
,starttijd TIME NOT NULL
,einddatum DATE NOT NULL
,eindtijd TIME NOT NULL
,docent VARCHAR(50) NOT NULL
,lokaal VARCHAR(6) NOT NULL
,check (starttijd < eindtijd)
修改
CREATE OR REPLACE FUNCTION check_rooster_tijd() returns trigger AS $BODY$
BEGIN
if(SELECT max(eindtijd) from rooster) > new.starttijd THEN
insert into rooster values (new.groep, new.startdatum, new.starttijd, new.einddatum, new.eindtijd, new.docent, new.lokaal);
return new;
END IF;
RAISE exception 'error %', new;
return null;
END;
$BODY$ language plpgsql;
CREATE trigger check_rooster_tijd_trigger BEFORE INSERT or UPDATE ON rooster
FOR EACH ROW EXECUTE PROCEDURE check_rooster_tijd();
答案 0 :(得分:0)
你应该包装你的选择:
SELECT max(eindtijd) FROM rooster WHERE rooster.groep = NEW.groep;
进入if(作为条件)并且如果条件不满足则引发异常。
例如(语法可能不正确,但是为了给你提示):
if (SELECT max(eindtijd) FROM rooster WHERE rooster.groep = NEW.groep)>new.starttijd then
raise exception 'Incorrect end time!';
end;
你可以看到:
http://www.postgresql.org/docs/9.3/static/plpgsql-errors-and-messages.html 有关提出例外和
的更多信息