繁体   English   中英

ORACLE SQL:如果存在更新其他插入

[英]ORACLE SQL : IF EXISTS UPDATE ELSE INSERT

让我们说:

我在 OracleDb 上有数据,就像我上面提到的那样。

TRANSFERNUMBER  |   VALUE1  | VALUE2 
2250            |   1000    |   2000
2251            |   1000    |   3000

我的主要目的是当在表上添加一些数据时,如果数据存在,它应该更新数据。 如果表中不存在数据,则应在表中插入新行。 这就是为什么我想在查询中使用 if 。 但是我无法处理查询。 此外,由于表上的某些原因,我无法编写程序。 有没有人通过在 Oracle 上使用查询来帮助我写这个?

MERGE是我们通常所做的。 下面是一个例子:

测试表及样本数据:

SQL> create table test (tn number, val1 number, val2 number);

Table created.

SQL> insert into test
  2    select 2250, 1000, 2000 from dual union all
  3    select 2251, 1000, 3000 from dual;

2 rows created.

SQL> select * From test order by tn;

        TN       VAL1       VAL2
---------- ---------- ----------
      2250       1000       2000
      2251       1000       3000

怎么做? using代表您要插入更新的数据

SQL> merge into test t
  2    using (select 2250 tn, 1 val1, 2 val2 from dual union all  --> for update
  3           select 3000   , 8     , 9      from dual            --> for insert
  4          ) x
  5    on (t.tn = x.tn)
  6  when matched then update set t.val1 = x.val1,
  7                               t.val2 = x.val2
  8  when not matched then insert values (x.tn, x.val1, x.val2);

2 rows merged.

结果:

SQL> select * From test order by tn;

        TN       VAL1       VAL2
---------- ---------- ----------
      2250          1          2      --> updated
      2251       1000       3000
      3000          8          9      --> inserted

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM