数据库不可知命令更新,如果存在,否则插入(UPSERT)春季启动



我在oracle中有一个查询,基本上更新激活标志为是,如果存在,添加的新条目与活动标志是,如果不存在。这个查询不适合我正在做的postgres转换工作。我试着找,但找不到一个查询,将工作的两种情况。

是否有人有这样的例子,将工作在postgres和oracle ?

一些背景:

sql: update if exists else insert

这是我现有的Oracle仅在java中的查询

private static final String SQL_UPDATE_OR_INSERT_USER ="
DECLARE 
u_name users.name%type := (:name); 
u_key users.ukey%type := (:ukey); 
BEGIN  
UPDATE users SET ACTIVE=1 WHERE ukey IN (u_key) and  lower(name) = lower(u_name); 
IF ( sql%rowcount = 0 ) THEN 
INSERT INTO users(user_id, ukey, name, ACTIVE) VALUES 
(hibernate_sequence.nextval, u_key, u_name, 1); 
END IF;   
END;";

这个不能在postgres中使用,postgres和这个看起来很不一样。

尽管有标准,但在某些情况下(有些人会说大多数情况下),任务没有与数据库无关的进程。不幸的是,这就是其中之一。在Postgres中,最接近Oracle的是:(参见带——<<<的行)>

DO $$                                            --<<< added
DECLARE 
u_name users.name%type := (:name); 
u_key users.ukey%type := (:ukey); 
sql_rowcount integer;                      --<<< added
BEGIN  
UPDATE users SET ACTIVE=1 WHERE ukey IN (u_key) and  lower(name) = lower(u_name); 

GET DIAGNOSTICS sql_rowcount = ROW_COUNT;  --<<< added 

IF ( sql_rowcount = 0 ) THEN               --<<< changed 
INSERT INTO users(user_id, ukey, name, ACTIVE) VALUES 
(hibernate_sequence.nextval, u_key, u_name, 1); 
END IF;   
END;
$$;                                              --<<< added

相关内容

  • 没有找到相关文章

最新更新