lightdb -- merge into insert 兼容 Oracle


最近,在支持业务从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)
;



请使用浏览器的分享功能分享到微信等