我有一个查找表,其中包含一列来源(通过我创建的them服务API捕获的各种硬编码活动)和应该与它们关联的各个品牌。这是为了让我可以将一个品牌给那些品牌为空的记录-这样他们就可以通过营销自动化工具使用特定的模板来欢迎他们。
我最终放弃了这个API,并用一个需要品牌的API取而代之,但在此期间,我必须制定一个临时解决方案,直到我给所有品牌团队时间来改变他们的API调用。
我写了这个函数:
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;以及在插入记录时触发函数的触发器:
CREATE TRIGGER brand_translation
AFTER INSERT ON subscriber
FOR EACH ROW EXECUTE PROCEDURE public.brand_lookup();但是我的触发器返回了一个错误:" error : function public.brand_lookup()不存在“(但它创建成功了)。除了我的触发器看不到我的函数之外,那个函数会做我想做的事情吗?我对函数相当生疏(正如你可能会说的那样)。
发布于 2013-03-26 07:38:53
它可能是这样工作的:
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();你的例子有太多的错误。
您需要从学习基础知识开始。像往常一样,我推荐非常好的手册。
启动here和here。
发布于 2013-03-26 05:56:27
Postres允许根据输入参数重载函数--因此,当您在不带参数的情况下调用public.brand_lookup()时,将找不到您创建的函数--public.brand_lookup(text)。我认为您需要在调用函数时传递必要的参数,或者删除函数定义中的参数。
https://stackoverflow.com/questions/15625409
复制相似问题