更新2个表Oracle

时间:2016-02-15 16:24:52

标签: sql oracle

到目前为止,这是我的代码。我不确定在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的问题,因为我不认为我需要创建另一个表,因为我正在尝试更新当前的表。如果我听起来很荒谬,请告诉我 - 哈!

1 个答案:

答案 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}}也是。