ORACLE SQL : 如果存在则更新否则插入
ORACLE SQL : IF EXISTS UPDATE ELSE INSERT
让我们说:
我在 OracleDb 上有我上面提到的数据。
TRANSFERNUMBER | VALUE1 | VALUE2
2250 | 1000 | 2000
2251 | 1000 | 3000
我的主要目的是在 table 上添加一些数据,如果数据存在,它应该更新数据。如果 table 上不存在数据,则应在 table 上插入新行。这就是为什么我想在我的查询中使用 if exists 。
但是我无法处理查询。此外,由于 table 上的某些原因,我无法编写程序。有没有人帮我在 Oracle 上使用查询来写这篇文章?
MERGE
是我们平时做的。这是一个例子:
测试table和示例数据:
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
表示您要 insert 或 update:
的数据
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>
让我们说:
我在 OracleDb 上有我上面提到的数据。
TRANSFERNUMBER | VALUE1 | VALUE2
2250 | 1000 | 2000
2251 | 1000 | 3000
我的主要目的是在 table 上添加一些数据,如果数据存在,它应该更新数据。如果 table 上不存在数据,则应在 table 上插入新行。这就是为什么我想在我的查询中使用 if exists 。 但是我无法处理查询。此外,由于 table 上的某些原因,我无法编写程序。有没有人帮我在 Oracle 上使用查询来写这篇文章?
MERGE
是我们平时做的。这是一个例子:
测试table和示例数据:
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
表示您要 insert 或 update:
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>