首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发错误[plpgsql]

触发错误[plpgsql]
EN

Stack Overflow用户
提问于 2016-04-25 10:00:09
回答 1查看 25关注 0票数 0

好的,我有这些桌子。回答和提问。

应答表有:

answerID (PK)

回答

datePosted

questionID

电子邮件

试题表有:

questionID (PK)

问题

datePosted

电子邮件

我想确保回答问题的用户(电子邮件)属于做问题的用户(电子邮件)的用户网络。我的用户网络可以通过另一个在这里没有业务的表创建。我有一个函数来查找特定用户的用户网络。因此,我编写了以下代码:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION "Social_Network".answers_only_by_users_in_user_network()
  RETURNS TRIGGER AS

  $$
  begin
   IF new.email NOT IN (select network_email from     "Social_Network".find_user_network(question.email)) then
      RAISE EXCEPTION 'user that answered does not belong in user network';
      return null;
   else
      return new;
   end if;
  end;
  $$
  LANGUAGE plpgsql VOLATILE


  CREATE TRIGGER answer_restriction BEFORE INSERT OR UPDATE ON     "Social_Network".answer
   for each row execute procedure     "Social_Network".answers_only_by_users_in_user_network();

函数find_user_network查找特定用户的用户网络。我为答案表设置了这个触发器,但是在IF语句中有一个问题,因为在函数find_user_network的输入参数中,我想将电子邮件放在表问题中。但是,当我试图编辑上表中的数据以检查触发器是否正常工作时,它会弹出错误。错误说我遗漏了FROM子句-表问题的条目,它将触发器函数的第3行指向if语句所在的位置。

我的触发器已经成功创建,我的触发器函数也已经创建成功。但这一错误依然存在。对我做错了什么有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 10:37:43

PostgreSQL只在编译时对嵌入式查询进行语法检查。完整检查(语义)在运行时。

查询

代码语言:javascript
复制
SELECT new.email NOT IN 
  (SELECT network_email
     FROM  "Social_Network".find_user_network(**question**.email)) 

是错误的,因为question.email是与表:问题相关的限定标识符(tablename.columnname格式)。但是在这个查询中没有声明对这个关系的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36837390

复制
相关文章

相似问题

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