【发布时间】:2016-07-14 11:44:12
【问题描述】:
我定义了下面的 plpgsql 函数(触发前)来更新数据,如果提供了其中一列,我将从静态数据中获取另一列。但我想知道为给定的“columna”获取静态数据的最佳方法是什么,我需要从 static_tbl 获取“columnb”(更像是字典/地图数据结构)。目前我正在静态表上的 Trigger 函数内部进行查询。
我知道我也可以使用 case 语句来代替查询。请让我知道什么最适合这里。 添加测试数据 说 ColumnA 包含 'a' 它将作为 'Alphabet A' 传播到 ColumnB 否则 ColumnB 包含“字母 A”,它将作为“a”传播到 ColumnA。 存储用于将 columnA 值转换为 columnB 值的静态数据的最佳方法是什么?
CREATE FUNCTION update_tblname_column_b () RETURNS TRIGGER AS $$
BEGIN
IF NEW IS NULL THEN
RAISE EXCEPTION 'this function cannot be installed with a DELETE trigger';
END IF;
IF NEW.column_b IS NOT NULL AND NEW.column_a IS NULL THEN
NEW.column_a = (select column_a from static_tbl where column_b = NEW.column_b);
ELSIF NEW.column_a IS NOT NULL AND NEW.column_b IS NULL THEN
NEW.column_b = (select column_b from static_tbl where column_b = NEW.column_a);
END IF;
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;
CREATE TRIGGER populate_column
BEFORE INSERT OR UPDATE ON creatives FOR each ROW
EXECUTE PROCEDURE update_tblname_column_b();
【问题讨论】:
-
这还不清楚。请添加触发器本身,而不仅仅是触发器功能。请添加触发器之前和之后的示例数据。
-
@SMW 添加了触发器定义本身和触发器定义的一些测试样本
标签: postgresql stored-procedures triggers plpgsql