我需要对我的数据库进行一些补救工作,以纠正一些数据错误。我在目标表中有一个数字字段,需要更新为基础查询的结果。大约有30,000行要更新。
尝试了以下详细描述的代码的许多排列,但均未成功。我意识到所提供的代码不正确,但是我希望你们能够从中推断出我正在努力实现的目标。
UPDATE TARGETTABLE
SET NUMFIELD = IL1.NUMFIELD
(
SELECT IL1.ID, IL1.NUMFIELD FROM
(
SELECT H.ID, TRUNC(TO_CHAR(H.TIMEFIELD,'FF9')/1000000,'000')
"NUMFIELD" FROM HISTORIC_ALARM_LOG@REMOTETABLE
WHERE ID IN
(
SELECT ID FROM TARGETTABLE
WHERE (NUMFIELD = 0 OR NUMFIELD = 1)
AND TIMEFIELD BETWEEN TO_DATE('23 Apr 2019 00:00:00','DD MON YYYY
HH24:MI:SS') AND TO_DATE('25 Apr 2019 00:00:00','DD MON YYYY
HH24:MI:SS')
AND DATASOURCEID = 3
)
) IL1
)
答案 0 :(得分:0)
我认为这是您想要的逻辑:
UPDATE TARGETTABLE tt
SET NUMFIELD = (SELECT "NUMFIELD"
FROM HISTORIC_ALARM_LOG@REMOTETABLE rt
WHERE rt.ID = tt.id
)
WHERE tt.NUMFIELD IN (0, 1) AND
tt.TIMEFIELD >= DATE '2019-04-23' AND
tt.TIMEFIELD >= DATE '2019-04-25' AND
tt.DATASOURCEID = 3;
注意:
WHERE
中(与UPDATE
关联)。DATE
常量-编写起来更安全,更简单。