我们有两张桌子
COI_EVENTS
H_COI_EVENTS
相关的唯一列是EVENT_ID
和TYPE_ID
。 EVENT_ID
是PK列,TYPE_ID
链接到另一个表(此处不相关)。
COI_EVENTS
表包含当前事件数据。每次通过应用程序更新都会将COI_EVENTS
数据复制到H_COI_EVENTS
以获取历史记录。
与当前事件关联的部分H_COI_EVENTS
包含的TYPE_ID
与COI_EVENTS
中的TYPE_ID
不同,这是混乱的数据。
对于COI_EVENTS
不匹配的所有历史记录行,我想将H_COI_EVENTS
从TYPE_ID
复制到TYPE_ID
。 (也许解决方案甚至可以将非历史记录H_COI_EVENTS
复制到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);
)。
我试过
update H_COI_EVENTS heo
set heo.TYPE_ID = (select e1.TYPE_ID
from COI_EVENTS e1
join H_COI_EVENTS he1
on heo.EVENT_ID = e1.EVENT_ID
where e1.EVENT_ID = heo.EVENT_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);
但这会导致一些语法错误,因为此处不允许使用FROM。再试一次
Fehler beim Start in Zeile 22 in Befehl:
update H_COI_EVENTS heo
set heo.TYPE_ID = ( select e1.TYPE_ID from COI_EVENTS e1 join H_COI_EVENTS he1 on heo.EVENT_ID = e1.EVENT_ID where e1.EVENT_ID = heo.EVENT_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)
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:
给了我一个错误:
update H_COI_EVENTS heo
set heo.TYPE_ID = ( select ei.TYPE_ID from COI_EVENTS ei where ei.EVENT_ID = heo.EVENT_ID )
更新:
将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:
然而,Oracle窒息:
format
我不明白。
我如何实现我所描述的目标?