ORACLE SQL: ЕСЛИ СУЩЕСТВУЕТ ОБНОВЛЕНИЕ, В противном случае вставьте - PullRequest
0 голосов
/ 11 февраля 2020

Скажем:

У меня есть данные на OracleDb, как я упоминал выше.

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

Моя основная цель - добавить некоторые данные в таблицу, если они существуют, и они должны обновлять данные. если данные не существуют в таблице, следует вставить новую строку в таблицу. Вот почему я хочу использовать, если существует по моему запросу. Однако я не могу обработать запрос. Также я не могу написать процедуру из-за некоторых причин на столе. Кто-нибудь поможет мне написать это, используя запрос на Oracle?

1 Ответ

3 голосов
/ 11 февраля 2020

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>
...