Перед обновлением триггер не работает - PullRequest
0 голосов
/ 30 апреля 2018

Я создал эту триггерную функцию PL / pgSQL в PostgreSQL:

CREATE TRIGGER question31
BEFORE INSERT OR UPDATE
ON public."Semester"
FOR EACH ROW
        EXECUTE PROCEDURE public.trigger31();

CREATE or replace FUNCTION public.trigger31()
        RETURNS trigger 
    AS 
    $$
    begin
        if(TG_OP='UPDATE')then
            if (new.start_date>(select p.end_date from "Semester" p where p.semester_id in(select s.semester_id-1 from "Semester" s where s.end_date=old.end_date))
            or new.start_date>=new.end_date) then

             return old;

            else
               if new.semester_status='past'

                        if old.semester_status='present' then
                            return new;
                        elsif old.semester_status='future' then
                            return old;
                        else
                            return new;
                        end if;

                end if;
            end if;
        end if;
        RETURN new;
    end;
    $$
    language 'plpgsql'

Мой стол до Update:

 ________________________________________________________
| semester_id | start_date | end_date   | semester_status |
-------------- ------------ ------------ -----------------
|      1      | 2010-1-10  | 2010-12-10 |      past       |
-------------- ------------ ------------ -----------------
|      2      | 2011-1-10  | 2011-12-10 |      present    |
-------------- ------------ ------------ -----------------
|      3      | 2012-1-10  | 2012-12-10 |      future     |
-------------- ------------ ------------ -----------------
|      4      | 2013-1-10  | 2013-12-10 |      future     |
-------------- ------------ ------------ -----------------

Я хочу Update semester_id=2 вот так:

Update "Semester" 
set semester_status = 'past'
where semester_id = 2

Я бы подождал, чтобы изменить 'semester_status' с 'present' на 'past'

У нас те же результаты и при попытке Update start_date.

Я имею в виду, что update не работает правильно.

Как я могу это исправить?

...