2015-05-26 49 views
1

我們使用不同的數據庫進行測試(mysql)和生產(oracle)系統。是否有一個共同的SQL語句更新行,如果它存在和插入,如果不是?是否有一個非數據庫特定的「插入或更新」命令

問候, 馬克

+0

如果你爲什麼要使用Oracle由於mysql的兼容性,不能使用它的好處嗎? – miraclefoxx

+0

最常用的命令是'merge'和'upsert'。 –

+1

爲什麼在生產系統是Oracle時在MySQL上進行測試?!? – jarlh

回答

2

答案是NO。對於MYSQL來說它會有所不同,對於Oracle來說它會有所不同。

在MySQL中它會像

INSERT INTO tabelname (id, name) 
VALUES (1, 'abc') 
ON DUPLICATE KEY UPDATE id = id; 

在Oracle它會像

DECLARE 
    x NUMBER:=0; 
BEGIN 
    SELECT nvl((SELECT 1 FROM tabelname WHERE name = 'abc'), 0) INTO x FROM dual; 

    IF (x = 1) THEN 
     INSERT INTO tabelname (1,'abc') 
    END IF; 

END; 

,或者您可以使用合併這樣的:

merge into tablename a 
    using (select 1 id, 'abc' name from dual) b 
     on (a.name = b.name) 
    when not matched then 
    insert(id, name) 
     values(b.id, b.name) 
+2

爲什麼不簡單地在oracle中合併? – miraclefoxx

+0

@miraclefoxx: - 是的,這也是一個選項,事實上更好。我的意思是讓OP瞭解MYSQL和Oracle沒有共同的查詢 –

+1

@miraclefoxx: - 更新了合併選項! –

相關問題