首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要Postgres触发器和函数方面的帮助

需要Postgres触发器和函数方面的帮助
EN

Stack Overflow用户
提问于 2013-03-26 05:46:34
回答 2查看 864关注 0票数 4

我有一个查找表,其中包含一列来源(通过我创建的them服务API捕获的各种硬编码活动)和应该与它们关联的各个品牌。这是为了让我可以将一个品牌给那些品牌为空的记录-这样他们就可以通过营销自动化工具使用特定的模板来欢迎他们。

我最终放弃了这个API,并用一个需要品牌的API取而代之,但在此期间,我必须制定一个临时解决方案,直到我给所有品牌团队时间来改变他们的API调用。

我写了这个函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION public.brand_lookup(IN i_brand TEXT )
  RETURNS SETOF RECORD VOLATILE AS
$$
BEGIN
   RETURN QUERY
     UPDATE subscriber
     SET brand = (SELECT brand FROM brand_translation
                  WHERE source = subscriber.source);
END;
$$
LANGUAGE plpgsql;

以及在插入记录时触发函数的触发器:

代码语言:javascript
复制
CREATE TRIGGER brand_translation 
  AFTER INSERT ON subscriber
  FOR EACH ROW EXECUTE PROCEDURE public.brand_lookup();

但是我的触发器返回了一个错误:" error : function public.brand_lookup()不存在“(但它创建成功了)。除了我的触发器看不到我的函数之外,那个函数会做我想做的事情吗?我对函数相当生疏(正如你可能会说的那样)。

EN

回答 2

Stack Overflow用户

发布于 2013-03-26 07:38:53

它可能是这样工作的:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION public.f_brand_lookup()
   RETURNS trigger AS
$func$
BEGIN
   SELECT INTO NEW.brand
          bt.brand
   FROM   brand_translation bt
   WHERE  bt.source = NEW.source;

   RETURN NEW;
END
$func$
LANGUAGE plpgsql;

CREATE TRIGGER brand_insert_before_lookup
BEFORE INSERT ON subscriber
FOR EACH ROW EXECUTE PROCEDURE public.f_brand_lookup();

你的例子有太多的错误。

您需要从学习基础知识开始。像往常一样,我推荐非常好的手册。

启动herehere

票数 2
EN

Stack Overflow用户

发布于 2013-03-26 05:56:27

Postres允许根据输入参数重载函数--因此,当您在不带参数的情况下调用public.brand_lookup()时,将找不到您创建的函数--public.brand_lookup(text)。我认为您需要在调用函数时传递必要的参数,或者删除函数定义中的参数。

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

https://stackoverflow.com/questions/15625409

复制
相关文章

相似问题

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