lightdb -- merge into insert 相容 Oracle

Hanson69發表於2023-10-17


最近,在支援業務從Oracle遷移到lightdb中發現merge into的不相容:業務中merge語法中有`insert(table.column)`用表字首

的SQL, 但在lightdb 的`merge`操作中卻不被支援。所以新版的lightdb支援了該功能。


Merge語句簡介


在開始介紹`insert(table.column)`在`merge`語句中的支援之前,讓我們先了解一下`merge`語句的基本概念。

`merge`語句是一種用於在目標表中執行插入、更新和刪除操作的強大語句。它的語法通常是這樣的:

MERGE INTO target_table
USING source_table
ON (condition)
WHEN MATCHED THEN
  UPDATE SET column1 = value1, column2 = value2, ...
WHEN NOT MATCHED THEN
  INSERT (column1, column2, ...)
  VALUES (value1, value2, ...);

在這個語句中,`target_table`是我們要操作的目標表,`source_table`則是我們的資料來源。

根據`ON`後的條件,`merge`語句會執行相應的更新或插入操作。

Insert語句的表字首問題

在資料庫操作中,我們常常需要指定表的字首,以區分不同的表。然而,我們發現`insert(table.column)`的語法

在`merge`語句中不被支援。 這是為什麼呢?


這個現象的原因在於,`merge`操作中,更新插入的物件都是目標表,而`insert`語句本身並不支援

`insert into table(table.column)`這樣的語法。 因此,在`merge` insert操作時,如果使用者寫了`insert(table.column)`這樣的語法,就需要在語法轉換中將其轉換

為`insert(column)`。


用法示例:

MERGE INTO target t
USING source AS s
ON t.tid = s.sid
WHEN NOT MATCHED THEN
   INSERT (t.tid, t.balance) 
VALUES (0, 0)
;



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982913/viewspace-2989282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章