Sql Oracle:从非历史记录表中用正确的类型\u ID更新历史记录表类型\u ID
我们有两张桌子Sql Oracle:从非历史记录表中用正确的类型\u ID更新历史记录表类型\u ID,sql,oracle,copy,Sql,Oracle,Copy,我们有两张桌子 COI_EVENTS H_COI_EVENTS 唯一相关的列是EVENT_ID和TYPE_ID。EVENT_ID是PK列,TYPE_ID链接到与此无关的另一个表 COI_事件表包含当前事件数据。通过应用程序进行的每次更新都会将COI_事件数据复制到H_COI_事件以备历史记录 某些链接到当前事件的H_COI_事件包含与COI_事件不同的类型ID,后者是混乱的数据 我想将类型ID不匹配的所有历史记录行的类型ID从COI_事件复制到H_COI_事件。也许该解决方案甚至可以将非历史类
COI_EVENTS
H_COI_EVENTS
唯一相关的列是EVENT_ID和TYPE_ID。EVENT_ID是PK列,TYPE_ID链接到与此无关的另一个表
COI_事件表包含当前事件数据。通过应用程序进行的每次更新都会将COI_事件数据复制到H_COI_事件以备历史记录
某些链接到当前事件的H_COI_事件包含与COI_事件不同的类型ID,后者是混乱的数据
我想将类型ID不匹配的所有历史记录行的类型ID从COI_事件复制到H_COI_事件。也许该解决方案甚至可以将非历史类型ID复制到H_COI_事件
我试过了
update H_COI_EVENTS heo
set heo.TYPE_ID = e.TYPE_ID
where exists (select e.TYPE_ID
from COI_EVENTS e
join H_COI_EVENTS he
on he.EVENT_ID = e.EVENT_ID
where he.TYPE_ID <> e.TYPE_ID);
然而,甲骨文却因以下原因而窒息:
Fehler beim Start in Zeile 33 in Befehl:
update H_COI_EVENTS heo
set heo.TYPE_ID = ( select ei.TYPE_ID from COI_EVENTS ei where ei.EVENT_ID = heo.EVENT_ID )
Fehlerbericht:
SQL-Fehler: ORA-01407: Aktualisieren von ("ABN_12C"."H_COI_EVENTS"."TYPE_ID") zu NULL nicht möglich
01407. 00000 - "cannot update (%s) to NULL"
*Cause:
*Action:
我不明白
如何实现我所描述的?我发现使用MERGE比使用相关更新容易得多,为此,我总是需要查阅SQL语法指南才能正确使用相关更新
MERGE INTO H_COI_EVENTS H
USING (SELECT EVENT_ID, TYPE_ID FROM COI_EVENTS) C
ON C.EVENT_ID = H.EVENT_ID
WHEN MATCHED THEN
UPDATE SET H.TYPE_ID = C.TYPE_ID
WHERE H.TYPE_ID <> C.TYPE_ID;
您能否更新您的问题,在两个表中包括一些示例数据以及预期输出?
update H_COI_EVENTS heo
set heo.TYPE_ID = ( select ei.TYPE_ID from COI_EVENTS ei where ei.EVENT_ID = heo.EVENT_ID )
Fehler beim Start in Zeile 33 in Befehl:
update H_COI_EVENTS heo
set heo.TYPE_ID = ( select ei.TYPE_ID from COI_EVENTS ei where ei.EVENT_ID = heo.EVENT_ID )
Fehlerbericht:
SQL-Fehler: ORA-01407: Aktualisieren von ("ABN_12C"."H_COI_EVENTS"."TYPE_ID") zu NULL nicht möglich
01407. 00000 - "cannot update (%s) to NULL"
*Cause:
*Action:
MERGE INTO H_COI_EVENTS H
USING (SELECT EVENT_ID, TYPE_ID FROM COI_EVENTS) C
ON C.EVENT_ID = H.EVENT_ID
WHEN MATCHED THEN
UPDATE SET H.TYPE_ID = C.TYPE_ID
WHERE H.TYPE_ID <> C.TYPE_ID;