Как разделить идентификатор между исходной таблицей только для чтения и таблицей обновления - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть две таблицы: первая A предназначена только для чтения, исходная таблица, а вторая B обновляется в потоке приложения (вставка новых данных). Давайте предположим, что я хочу заполнить таблицу B новыми исходными данными из A, и один из идентификаторов A уже «взят» B посредством некоторой вставки. Как предотвратить подобные события?

1 Ответ

0 голосов
/ 08 февраля 2020

Вы ищете синтаксис слияния, который является Oracle реализацией запроса upsert (он же update / insert).

Это выглядит так:

merge into tableb b
using tablea a on (a.id = b.id)
when matched then
    update set b.col1 = a.col1
when not matched then
    insert(id, col1, col2, col3) values(a.id, a.col1, a.col2, a.col3)

Предложение using содержит часть on, которая определяет условие соединения между таблицами.

Предложение matched описывает, что делать в случае возникновения конфликта: здесь вы можете обновить некоторые другие столбец.

Предложение not matched выполняет фактическую вставку.

...