检查同一组的开始时间是否 > 结束时间

Check to see if starttime > end time of same group

我有一个数据库,里面有一个日历。根据我要插入的组,它应该检查 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();

你应该包装你的 select:

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 有关引发异常的更多信息和

How to execute PostgreSQL RAISE command dynamically 例如。