到目前为止,这是我的代码。我不确定在When not matched
放什么,因为理论上他们应该总是匹配。所以我想我可以把''
(对于null)放在那里?
此外,我的子查询中需要一个条件,用于WHERE to_date(fgmulti.in_date)= to_date(sysdate)。
MERGE INTO fgmulti FGM
USING
(SELECT * FROM arinvt
WHERE class LIKE 'CP%' OR 'FG%' OR 'IN%' OR 'LA%' OR 'PK%') AS Classes
ON fgm.arinvt_id = classes.id
WHEN MATCHED THEN
SET non_conform_id = '21'
WHEN NOT MATCHED BY TARGET THEN
INSERT (non_conform_id) VALUES ('17')
我不确定你对SQL Fiddle的问题,因为我不认为我需要创建另一个表,因为我正在尝试更新当前的表。如果我听起来很荒谬,请告诉我 - 哈!
答案 0 :(得分:0)
Oracle的语法错误。这应该有用。
MERGE INTO fgmulti FGM
USING
(SELECT * FROM arinvt
WHERE class LIKE 'CP%'
OR class LIKE 'FG%'
OR class LIKE 'IN%'
OR class LIKE 'LA%'
OR class LIKE 'PK%') Classes
ON (fgm.arinvt_id = classes.id
and fgm.in_date = sysdate)
WHEN MATCHED THEN
UPDATE SET non_conform_id = '21'
请注意,分支是可选的。如果你不想在行不匹配时做任何事情,那么只需省略WHEN NOT MATCHED子句。
另外,当该值已经是DATE时,我们不需要TO_DATE()
,sysdate
当然是in_date
,我希望{{1}}也是。