我有一个查找表,其中包含一列源(来自我创建的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()不存在”(但它成功创建)“.除了我的触发器没有看到我的功能,这个功能会做我做的事情吗?我有意吗?我在功能方面相当不错(你可能会说).
最佳答案 它可能会像这样工作:
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();