我需要添加一个触发器,当某个超出边界(而不是2、3、5-7)的数值插入或更改sql表中的“品位”列中的现有行时,会引发警告消息。此代码示例仅在创建新行时引发此类消息。
当现有行中的值为altered?
CREATE TRIGGER person
BEFORE INSERT ON hr."position"
FOR EACH ROW EXECUTE PROCEDURE person();
CREATE OR REPLACE FUNCTION person()
RETURNS TRIGGER
SET SCHEMA 'hr'
LANGUAGE plpgsql
AS $$
BEGIN
IF ((NEW.grade < 2) or (NEW.grade > 3 and NEW.grade < 5)
or (NEW.grade > 7)) THEΝ
RAISE EXCEPTION 'Incorrect value';
END IF;
RETURN NEW;
END;
$$;
发布于 2022-06-17 05:02:54
检查新值是否与列中的现有值对应:
IF new_value not in (SELECT DISTINCT grade FROM grade_salary)
THEN RAISE EXCEPTION 'Inadmissible value.'
全文:
CREATE OR REPLACE FUNCTION person()
RETURNS TRIGGER
SET SCHEMA 'hr'
LANGUAGE plpgsql
AS $$
declare
new_value numeric;
begin
select new.grade from "position" into new_value;
IF new_value not in (SELECT DISTINCT grade FROM grade_salary)
THEN RAISE EXCEPTION 'Inadmissible value.';
END IF;
RETURN NEW;
END;
$$;
https://stackoverflow.com/questions/72650079
复制相似问题