У меня есть таблица TEST_RUA
, куда я ежедневно импортирую данные. Я использую для этой таблицы логику усечения и вставки. Теперь у меня есть другая таблица TEST_RUA_MER
, такая же, как таблица TEST_RUA
, где я хочу применить логику загрузки Delta. В обеих таблицах всегда есть уникальная комбинация значений столбцов ID_LL, ID_UU, TKR
.
Логика Delta должна быть:
Для обновления: я хочу сравнить данные из таблиц TEST_RUA_MER
и TEST_RUA
, а затем обновить таблицу TEST_RUA_MER
только тогда, когда в обеих таблицах существует уникальная комбинация значений столбца ID_LL, ID_UU, TKR
и когда есть изменение в любом значении поля. в таблице TEST_RUA
. Мы также можем ввести новый столбец с именем status и обновить статус как «UPD» для этих строк, чтобы при необходимости можно было отфильтровать данные в представлении.
Для вставки: если уникальная комбинация значений столбцов ID_LL, ID_UU, TKR
не существует в таблице TEST_RUA_MER
, но существует в таблице TEST_RUA
, вставьте данные в таблицу TEST_RUA_MER
.
Удалить: оператор Delete можно выполнить отдельно. Мы должны использовать оператор Delete, чтобы удалить данные из таблицы TEST_RUA_MER
, которой нет в таблице TEST_RUA
, при использовании уникальной комбинации столбцов ID_LL, ID_UU, TKR
, а также удалить данные из таблицы TEST_RUA_MER
, которая равна таблице TEST_RUA
. Итак, в таблице TEST_RUA_MER
я просто хочу обновлять и обновлять данные из таблицы TEST_RUA
. Если удалить невозможно, мы также можем создать просто View, чтобы отфильтровать данные, если это возможно.
Можно ли этого достичь с помощью одного оператора слияния и отдельно оператора удаления или есть ли другая логика, которую мы можем реализовать? Я не хочу использовать pl / sql для этой логики. Но я также могу использовать Sql View для любого условия сравнения, потому что в конце я просто хочу сгенерировать отчет csv с таблицей дельта-нагрузки.
Ниже приведена скрипта sql для создания и вставки оператора: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=6288a8b83149d3d543a776b9690bb59f
Ниже приведены инструкции sql:
Создать выписку для TEST_RUA
таблицы:
Create table TEST_RUA (CLASS VARCHAR2(100), ID_LL VARCHAR2(100), ID_UU VARCHAR2(100), TKR VARCHAR2(100), NAME VARCHAR2(100))
Вставить оператор для TEST_RUA
таблицы:
INSERT INTO TEST_RUA VALUES ('Bond', 'BERF', 'GV9999B12M1', 'TKXX', 'TES_RES');
INSERT INTO TEST_RUA VALUES ('Bond', 'BERT', 'FV9999B12M3', 'BURR', 'PRS_RES');
INSERT INTO TEST_RUA VALUES ('Bond', 'BREG', 'TV9999B12M4', 'CVKR', 'FRTG_OP');
INSERT INTO TEST_RUA VALUES ('Bond', 'BREG', 'SQTUREGBFNO', 'LRQU', 'BEGT_TU');
Создать инструкцию для TEST_RUA_MER
таблицы:
Create table TEST_RUA_MER (CLASS VARCHAR2(100), ID_LL VARCHAR2(100), ID_UU VARCHAR2(100), TKR VARCHAR2(100), NAME VARCHAR2(100));
Вставить оператор для TEST_RUA_MER
таблицы:
INSERT INTO TEST_RUA_MER VALUES ('Bond', 'BERF', 'GV9999B12M1', 'TKXX', 'TES_RES');
INSERT INTO TEST_RUA_MER VALUES ('Bond', 'BERT', 'FV9999B12M3', 'BURR', 'PRS_RES');
INSERT INTO TEST_RUA_MER VALUES ('Bond', 'BREG', 'TV9999B12M4', 'CVKR', 'MT_QUE');
INSERT INTO TEST_RUA_MER VALUES ('Bond', 'BREG', 'LV9999B12F6', 'OPTQ', 'BWQT_UI');
Ожидаемый результат в таблице TEST_RUA_MER
:
CLASS ID_LL ID_UU TKR NAME
Bond BREG TV9999B12M4 CVKR FRTG_OP
Bond BREG SQTUREGBFNO LRQU BEGT_TU