【问题标题】:Check attribute in trigger function (PostgreSQL)检查触发函数中的属性(PostgreSQL)
【发布时间】:2020-10-02 18:36:50
【问题描述】:

我在学校有一个任务需要我创建一个表和一个触发器。 我真的不知道如何解释它,但我如何检查 cID 是否在触发器函数的 select 语句中? 基本上我的目标是只允许不在“SELECT * from Example2 natural join Example3”内的 cID 值。任何人都可以帮助我吗?谢谢。

CREATE TABLE Example(
cID INTEGER REFERENCES Example2(attr),
level INTEGER CHECK (level BETWEEN 1 AND 10)); 


CREATE FUNCTION exp() RETURNS TRIGGER AS
$$
BEGIN
 IF EXISTS (select * from Example2 natural join Example3) THEN
 RAISE EXCEPTION '...';
 END IF;
 return null;
 END; $$ language plpgsql;


CREATE CONSTRAINT TRIGGER trg
AFTER INSERT OR UPDATE ON Example
FOR EACH ROW
EXECUTE PROCEDURE exp();

【问题讨论】:

  • 不确定“只允许 cID 值”是什么意思?如果您提供显示您想要完成的任务的示例数据,这将更容易回答。

标签: sql postgresql triggers


【解决方案1】:
创建函数 exp() 返回触发器为 $$ 开始 IF EXISTS(从 Example2 a 中选择 1,其中 a.cID = new.cID ) THEN 引发异常'...'; 万一; 返回返回新; 结尾; $$ 语言 plpgsql;

【讨论】:

  • 欢迎。感谢您的贡献。您能否编辑您的答案以提供更多解释?这将帮助刚接触 PostgreSQL 的人更好地理解这里的推理。
  • 所提供的答案被标记为低质量帖子以供审核。以下是How do I write a good answer? 的一些指南。这个提供的答案可以从解释中受益。仅代码答案不被视为“好”答案。来自Review
  • 是的,我的意思是这段代码可以工作,但也许解释一下会很酷。谢谢!
猜你喜欢
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2021-03-09
  • 2015-07-18
  • 2017-08-02
  • 1970-01-01
相关资源
最近更新 更多