插入或更新程序Postgres 9.2

时间:2013-06-06 06:04:28

标签: postgresql-9.2 pgadmin

我试图创建一个标准函数来插入产品或添加现有产品的数量,到目前为止我有这个:

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中没有真正体验过。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

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

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