我试着写一个函数来插入一些值 column3
在我的表中基于这个表中的值,但是我不太熟悉在postgresql9.6中编写函数。
--Create some table
CREATE TABLE test(column1 INT, column2 INT, column3 TEXT)
INSERT INTO test VALUES(-8020,15),(-200,1),(23,115)
--Build function
CREATE OR REPLACE FUNCTION new_function()
RETURNS TEXT AS
$$
BEGIN
IF test(column1) <= -7000 THEN INSERT INTO test(column3) VALUES('small');
ELSIF test(column1) >= -7000 AND test(column2) <= 15 THEN INSERT INTO test(column3) VALUES('nohello');
ELSIF test(column1) >= -7000 ANDtable(column2) >= 15 THEN INSERT INTO test(column3) VALUES('test');
ELSE INSERT INTO test(column6) VALUES("nodata");
END IF;
END;
$$
LANGUAGE plpgsql;
结果应该是一个如下所示的表:
Column1 | Column2 | Column3
---------------------------
-8020 | 15 | small
-200 | 1 | nohello
23 | 115 | test
打电话的时候 new_function
我得到了错误 column1 doesn't exist.
2条答案
按热度按时间6bc51xsx1#
你好像真的在找一个
update
(更改现有行上的值)而不是insert
(创建新行)。但归根结底,我建议只使用计算列:
在表中插入或更新行时,数据库会相应地自动调整计算列,因此它总是最新的。
db小提琴演示:
请注意,生成的列仅在postgres 12开始时可用。在早期版本中,一种替代方法是仅使用表中的前两列,并创建视图以公开第三列:
然后可以查询视图而不是表来显示数据。
mnemlml82#
gmb的答案是完美的解决方案,尽管您可以使用
CASE
条件表达式,如下所示