2013-06-06 62 views
1

我试着去创建一个标准功能,插入一个产品或增加现有产品的数量,所以到目前为止,我有这样的:插入或更新过程的Postgres 9.2

CREATE OR REPLACE FUNCTION insert_materials (IN _ASADAFK VARCHAR(40), _material VARCHAR(40), _stock INT) 
RETURNS void AS 
$$ 
BEGIN 
    IF EXISTS (SELECT material FROM materials WHERE material= _material) 
    THEN 
    update materials set stock= (stock + _stock) where material=_material 

    ELSE 
    INSERT INTO "materials" VALUES(_ASADAFK,_material,_stock) 
END IF; 
END; 
$$ 
LANGUAGE 'plpgsql'; 

即时得到一个语法错误附近的ELSE,我曾尝试过几件事,但在PostGres中并没有真正体验过。请帮忙吗?

回答

0

在'ELSE'之前和'END IF'之前应该有分号(除了打开一个块之外的所有语句之后都需要分号,请参阅documentation)。 您仍然可能希望添加异常处理,因为如果在材质列上使用唯一索引,并且多个会话会尝试同时添加相同材质,INSERT可能会失败。

这里有很多类似的问题(例如看here)或谷歌的'postgres upsert'。

+0

非常感谢! +1 这是我第一天xD –