使用IF-ELSE时Postgresql触发器失败

使用IF-ELSE时Postgresql触发器失败,postgresql,triggers,Postgresql,Triggers,我有一段代码,它实际上是有效的: CREATE or replace FUNCTION checkRank() RETURNS trigger AS $checkRank$ DECLARE old_rank varChar; old_date date; BEGIN -- SELECT a.rank INTO old_rank from RANK a where a.account = new.account; SELECT a.rank

我有一段代码,它实际上是有效的:

    CREATE or replace FUNCTION checkRank() RETURNS trigger AS $checkRank$

    DECLARE
    old_rank varChar;
    old_date date;

    BEGIN 

--  SELECT a.rank INTO old_rank from RANK a where a.account = new.account;
    SELECT a.rank, a.date INTO old_rank, old_date from RANK a where a.account = new.account order by date desc LIMIT 1;

        -- Check if inserted rank != current rank           
        if old_rank = new.rank THEN
            RAISE EXCEPTION 'rank unchanged';
        END IF;
                if new.date < old_date THEN
            RAISE EXCEPTION 'old rank';
        END IF;

        RETURN NEW;
    END
$checkRank$ LANGUAGE plpgsql;
当我使用IF-ELSE时,它实际上失败了:

CREATE or replace FUNCTION checkRank() RETURNS trigger AS $checkRank$

    DECLARE
    old_rank varChar;
    old_date date;

    BEGIN 

--  SELECT a.rank INTO old_rank from RANK a where a.account = new.account;
    SELECT a.rank, a.date INTO old_rank, old_date from RANK a where a.account = new.account order by date desc LIMIT 1;

        -- Check if inserted rank != current rank           
        IF old_rank = new.rank THEN
            RAISE EXCEPTION 'rank unchanged';
        ELSE IF new.date < old_date THEN
            RAISE EXCEPTION 'old rank';
        ELSE
        RETURN NEW;
        END IF;
    END
$checkRank$ LANGUAGE plpgsql;
出现以下错误:

错误:输入结束时出现语法错误

第21行:$checkRank$LANGUAGE plpgsql

任何人都知道哪里出了问题,我无法用谷歌解决…

如果出现以下情况,您需要使用ELSIF而不是ELSE:

PL/pgSQL有三种形式的IF:

如果。。。然后如果结束

如果。。。然后其他的如果结束

如果。。。然后埃尔西夫。。。然后其他的如果结束

IF old_rank = new.rank THEN
    RAISE EXCEPTION 'rank unchanged';
ELSIF new.date < old_date THEN
    RAISE EXCEPTION 'old rank';
ELSE
    RETURN NEW;
END IF;