我有一个查找表,其中包含一列来源(来自通过我创建的 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();
你的例子有太多完全错误的地方。
您需要从学习基础知识开始。一如既往,我推荐一本非常好的手册。
Start here http://www.postgresql.org/docs/current/interactive/triggers.html and here http://www.postgresql.org/docs/current/interactive/plpgsql-trigger.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)