簡體   English   中英

Oracle - 使用 INSERT 和 UPDATE 合並語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM