将更新查询值分配给SQL中的变量

时间:2014-08-05 05:14:07

标签: sql postgresql updates plpgsql upsert

我需要在PostgreSQL中向表中插入一些行。但是在将行插入表之前,我应该使用update语句检查记录是否存在。如果update语句返回0行,那么我可以插入,否则我可以跳过该插入。我应该在PostgreSQL的.sql文件中为此编写SQL语句。

如何实现这一目标?

在Oracle中,我们有以下格式:

declare
  i number;
begin
  update employees set status = 'fired' where name like '%Bloggs';
  i := sql%rowcount;
IF i ==0 THEN
insert statement here
end

我如何在Postgres中实现这一目标?

1 个答案:

答案 0 :(得分:1)

如果并发对您来说不是问题,并且您想在plpgsql函数中执行此操作,请使用特殊变量FOUND

DO
$do$
BEGIN

UPDATE employees SET status = 'fired' WHERE ... ;

IF NOT FOUND THEN
   -- insert statement here
END IF;

END
$do$

或者使用数据修改CTE:

如果并发性相关,请阅读正确的UPSERT解决方案。