触发错误-postgresql
trigger error - postgresql
此触发器旨在在我尝试插入一条日期大于今天日期的记录并插入一条日期小于今天日期的记录时引发异常。
我已经这样做了:
/* This checks that the dob is before today's date and throws an exception if not */
CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$
DECLARE dob date;
BEGIN
SELECT passenger.dob INTO dob
FROM passenger
WHERE passengerid = passengerid;
IF dob > now() THEN
RAISE EXCEPTION 'Date of birth must be earlier than today';
END IF;
RETURN NEW;
END;
$check_dateofbirth$ LANGUAGE plpgsql;
/* this is used to run the function above */
CREATE TRIGGER insert_dateofbirth
BEFORE INSERT OR UPDATE ON passenger
FOR EACH ROW EXECUTE PROCEDURE check_dateofbirth();
当我使用 dob '2018-09-09' 插入数据时,出现异常 'Date of birth must be earlier than today',这是正确的,也是我想要的。但是,当我插入带有 dob 作为“1996-09-15”的数据时,我也得到错误的异常,因为它应该插入,因为 dob 比今天早。错误与我的 DOB 格式有关吗?应该是dd/mm/yyyy而不是yyyy/mm/dd??
尝试:
CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$
DECLARE dob date;
BEGIN
IF NEW.dob > now() THEN
RAISE EXCEPTION 'Date of birth must be earlier than today';
END IF;
RETURN NEW;
END;
$check_dateofbirth$ LANGUAGE plpgsql;
您不需要查询 table - 只需检查新记录。
此外:WHERE passengerid = passengerid
将 return 所有行,因为它始终为真
此触发器旨在在我尝试插入一条日期大于今天日期的记录并插入一条日期小于今天日期的记录时引发异常。
我已经这样做了:
/* This checks that the dob is before today's date and throws an exception if not */
CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$
DECLARE dob date;
BEGIN
SELECT passenger.dob INTO dob
FROM passenger
WHERE passengerid = passengerid;
IF dob > now() THEN
RAISE EXCEPTION 'Date of birth must be earlier than today';
END IF;
RETURN NEW;
END;
$check_dateofbirth$ LANGUAGE plpgsql;
/* this is used to run the function above */
CREATE TRIGGER insert_dateofbirth
BEFORE INSERT OR UPDATE ON passenger
FOR EACH ROW EXECUTE PROCEDURE check_dateofbirth();
当我使用 dob '2018-09-09' 插入数据时,出现异常 'Date of birth must be earlier than today',这是正确的,也是我想要的。但是,当我插入带有 dob 作为“1996-09-15”的数据时,我也得到错误的异常,因为它应该插入,因为 dob 比今天早。错误与我的 DOB 格式有关吗?应该是dd/mm/yyyy而不是yyyy/mm/dd??
尝试:
CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$
DECLARE dob date;
BEGIN
IF NEW.dob > now() THEN
RAISE EXCEPTION 'Date of birth must be earlier than today';
END IF;
RETURN NEW;
END;
$check_dateofbirth$ LANGUAGE plpgsql;
您不需要查询 table - 只需检查新记录。
此外:WHERE passengerid = passengerid
将 return 所有行,因为它始终为真