使用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;