Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:从非历史记录表中用正确的类型\u ID更新历史记录表类型\u ID_Sql_Oracle_Copy - Fatal编程技术网

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;