[英]Oracle - Merge Statement with INSERT and UPDATE
我有一個名為 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);
但是,收到此錯誤 -
missing ON keyword
誰能建議我在合並聲明中缺少什么。
謝謝!
那將是:
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);
理由:
Oracle 不支持AS
定義表別名 - 您需要刪除該關鍵字
列名必須在子查詢中定義
我還對齊了源表和目標表之間的列名,這樣查詢更容易理解。
我認為(Id, Txt)
不應該像以前那樣存在。
MERGE INTO maestro.TEXTDATA T
USING (
select N'/Common/UserStatusExpired' id, N'Expired' txt from dual
union all
select N'/Common/UserStatusPwdExpired' id, N'Pwd Expired' txt from dual
) AS Source 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);
問題是您指定的“as”子句。 看起來您想在聯合 select 列表中命名您的列。
MERGE INTO maestro.TEXTDATA T
USING (
select N'/Common/UserStatusExpired' id, N'Expired' txt from dual
union all select N'/Common/UserStatusPwdExpired' id, N'Pwd Expired' txt from dual
) source 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)
鐵路圖顯示沒有這樣的“as”子句。
(MERGE INTO maestro.TEXTDATA T USING (select N'/Common/UserStatusExpired' id, N'Expired' txt from dual union all select N'/Common/UserStatusExpired'txt dual from N'/Common/UserStatusPwdExpired') .TEXTID = Source.Id) 匹配時更新集 TEXT = Source.Txt 不匹配時插入(TEXTID,TEXT)值(Source.Id,Source.Txt)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.