【发布时间】:2022-11-04 15:12:24
【问题描述】:
我想通过触发器自动填充“depart_bt”表的“nat_cond”属性值,同一表“sect_ph”、“sect_n”、“metal_cond”的3个其他属性的值每个split_part( ..,'_',..) 功能。
例如 : 如果“nat_cond”的值:3*240+120mm2_AR2V_ALU
我应该得到:
“sect_ph”:3*240+120mm2
“sect_n”:AR2V
“metal_cond”:ALU
我的代码如下:
CREATE OR REPLACE FUNCTION nat_cond_auto() RETURNS TRIGGER
language plpgsql AS
$$
BEGIN
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
NEW.sect_ph:= (SELECT split_part(NEW.nat_cond::TEXT, '_', 1) LIMIT 1);
NEW.sect_n:= (SELECT split_part(NEW.nat_cond::TEXT, '_', 2) FROM depart_bt LIMIT 1);
NEW.metal_cond:= (SELECT split_part(NEW.nat_cond::TEXT, '_', 3) FROM depart_bt LIMIT 1);
END IF;
RETURN NEW;
END;
$$
;
-- table depart_bt
DROP TRIGGER IF EXISTS nat_conducteur ON depart_bt;
CREATE TRIGGER nat_conducteur BEFORE INSERT OR UPDATE ON depart_bt
FOR EACH ROW EXECUTE PROCEDURE nat_cond_auto();
但是,触发器工作得很好,除了第一个添加的行什么都不做。
我想我循环了一些东西。 预先感谢您的帮助。
【问题讨论】:
-
我觉得很难相信。
-
离开_bt 是一个空间表,我使用 QGIS 添加实体
-
这没有什么区别。我不相信你。请提供一个独立的、完整的复制器。
标签: postgresql triggers