我有一个查找表,其中包含一列来源(来自我创建的Web服务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();
但我的触发器返回错误“错误:函数public.brand_lookup()不存在”(但它成功创建)“。除了我的触发器没有看到我的函数的事实,该函数会做我的意图是什么?我在功能方面相当不错(你可能会说)。
答案 0 :(得分:2)
可能会这样:
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();
答案 1 :(得分:0)
Postres允许根据输入参数重载函数 - 因此当您在没有参数的情况下调用public.brand_lookup()
时,找不到您创建的函数 - public.brand_lookup(text)
。我认为你需要在调用函数时传递必要的参数,或者删除函数定义中的参数。