是否存在非特定于数据库的命令,用于"插入或更新"

时间:2015-05-26 12:40:03

标签: mysql sql oracle

我们为测试(mysql)和生产(oracle)系统使用不同的数据库。是否有一个常见的sql语句用于更新行(如果存在),如果不存在则插入?

此致 马克

1 个答案:

答案 0 :(得分:2)

答案是否定的。对于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)