首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写postgresql触发器,在将某个不正确的数值插入现有sql表列后引发警告消息?

如何编写postgresql触发器,在将某个不正确的数值插入现有sql表列后引发警告消息?
EN

Stack Overflow用户
提问于 2022-06-16 18:00:32
回答 1查看 99关注 0票数 0

我需要添加一个触发器,当某个超出边界(而不是2、3、5-7)的数值插入或更改sql表中的“品位”列中的现有行时,会引发警告消息。此代码示例仅在创建新行时引发此类消息。

当现有行中的值为altered?

  • Values时,如何通过键将“品位”列中的值绑定到存储它们的另一个表"grade_salary“中的列时,如何引发消息。如何编写插入/更改检查,以不指定具体的正确值(2、3、5-7)而引发消息,而只说明“如果更改后的值不在表”"grade_salary“列中指定的值之外,则引发错误消息”(而不允许修改该值)?

代码语言:javascript
运行
复制
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;
$$;
EN

回答 1

Stack Overflow用户

发布于 2022-06-17 05:02:54

检查新值是否与列中的现有值对应:

代码语言:javascript
运行
复制
IF new_value not in (SELECT DISTINCT grade FROM grade_salary)
THEN RAISE EXCEPTION 'Inadmissible value.'

全文:

代码语言:javascript
运行
复制
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;
$$;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72650079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档