Oracle - 带有 INSERT 和 UPDATE 的合并语句

ini*_*iki 2 sql oracle sql-update sql-insert

我有一个名为 TextData 的现有表,其中包含 TextId 和 Text 字段。在下面的语句中,我尝试使用 - 将一些记录合并(插入/更新)到该表中

MERGE INTO maestro.TEXTDATA T
USING ( 
select N'/Common/UserStatusExpired', N'Expired' from dual
union all select N'/Common/UserStatusPwdExpired', N'Pwd Expired' from dual
) AS Source (Id, Txt) ON (T.TEXTID = Source.Id)
WHEN MATCHED THEN
    UPDATE SET TEXT = Source.Txt
WHEN NOT MATCHED THEN
    INSERT (TEXTID, TEXT) VALUES(Source.Id, Source.Txt);
Run Code Online (Sandbox Code Playgroud)

但是,收到此错误 -

missing ON keyword
Run Code Online (Sandbox Code Playgroud)

谁能建议我在合并声明中缺少什么。

谢谢你!

GMB*_*GMB 5

那将是:

MERGE INTO textdata t
USING ( 
    SELECT N'/Common/UserStatusExpired' AS textid, N'Expired' AS text FROM DUAL
    UNION ALL SELECT N'/Common/UserStatusPwdExpired', N'Pwd Expired' FROM DUAL
) s ON (t.textid = s.textid )
WHEN MATCHED THEN
    UPDATE SET text = s.text
WHEN NOT MATCHED THEN
    INSERT (textid, text) VALUES(s.textid, s.text);
Run Code Online (Sandbox Code Playgroud)

理由:

  • Oracle 不支持AS定义表别名 - 您需要删除该关键字

  • 列名必须在子查询定义

我还对齐了源表和目标表之间的列名称,以便查询更容易遵循。