返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

使用合并方式更新和插入数据
在需要将数据批量添加至现有表的场景下,
GBase 8c 数据库提供了MERGE INTO 语句,
通过表合并的方式,高效地将新数据添加到现有表。
MERGE INTO 语句可将目标表和源表中的数据,通过关联条件进行匹配。若关联条件
匹配,则对目标表进行更新操作(UPDATE);若关联条件不匹配,则对目标表执行插入操

(INSERT)

这种方法能够将两个表合并执行UPDATE 和INSERT 操作,
避免多次执行。
前提条件
用户如需进行MERGE INTO 操作,需要同时拥有目标表的UPDATE 和INSERT 权限,
以及源表的SELECT 权限。
操作步骤
步骤1 创建源表products,并插入数据。
postgres=# CREATE TABLE products ( product_id INTEGER,product_name VARCHAR2(60),
category VARCHAR2(60));

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
326
postgres=# INSERT INTO products VALUES (1502, 'olympus camera', 'electrncs'), (1601,
'lamaze', 'toys'),(1666, 'harry potter', 'toys'), (1700, 'wait interface', 'books');
步骤2 创建目标表newproducts,并插入数据。
postgres=# CREATE TABLE newproducts ( product_id INTEGER, product_name
VARCHAR2(60), category VARCHAR2(60));
postgres=# INSERT INTO newproducts VALUES (1501, 'vivitar 35mm', 'electrncs'), (1502,
'olympus ', 'electrncs'),(1600, 'play gym', 'toys'),(1601, 'lamaze', 'toys'),(1666, 'harry potter',
'dvd');
步骤3 使用MERGE INTO 语句将源表products 的数据合并至目标表newproducts。
postgres=# MERGE INTO newproducts np
USING products p
ON (np.product_id = p.product_id )
WHEN MATCHED THEN
UPDATE SET np.product_name = p.product_name, np.category = p.category
WHEN NOT MATCHED THEN
INSERT VALUES (p.product_id, p.product_name, p.category) ;
上述语句中使用的参数说明,请见表9-7。更多信息,请参见《GBase 8c V5_3.0.0_SQL
手册》MERGE INTO。
表9-7 MERGE INTO 语句参数说明
参数
说明
举例
INTO 子句
指定需要更新或插入数据的目标表。
目标表支持指定别名。
取值:newproducts np
说明:名为newproducts,别名为
np 的目标表。
USING 子句
指定源表。源表支持指定别名。
取值:products p
说明:
名为products,
别名为p 的
源表。
ON 子句
指定目标表和源表的关联条件。
关联条件中的字段不支持更新。
取值:
np.product_id = p.product_id
说明:指定的关联条件为,目标
表newproducts 的product_id字段
和源表products的product_id字段
相等。
WHEN
MATCHED 子
当源表和目标表中数据针对关联条件
可以匹配上




WHEN
取值:WHEN MATCHED THEN
UPDATE SET

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
327

MATCHED 子句进行UPDATE 操作。
仅支持指定一个WHEN MATCHED 子
句。
WHEN MATCHED 子句可缺省,缺省
时,对于满足ON 子句条件的
行,不进行任何操作。
np.product_name
=
p.product_name,
np.category
=
p.category
说明:当满足ON 子句条件时,
将目标表
newproducts

product_name、category 字段的值
替换为源表products 相对应字段
的值。
WHEN
NOT
MATCHED 子

当源表和目标表中数据针对关联条件
无法匹配时,选择WHEN NOT
MATCHED 子句进行INSERT 操作。
仅支持指定一个WHEN NOT
MATCHED 子句。
WHEN NOT MATCHED 子句可缺省。
不支持INSERT 子句中包含多个
VALUES。
WHEN
MATCHED

WHEN
NOT MATCHED 子句顺序可以交换,
可以缺省其中一个,
但不能同时缺省。
取值:WHEN NOT MATCHED
THEN
INSERT VALUES
(p.product_id,
p.product_name,
p.category)
说明:将源表products 中,不满
足ON 子句条件的行插入目标表
newproducts。
步骤4 查询合并后的目标表newproducts。
postgres=# SELECT * FROM newproducts;
返回信息如下:
product_id | product_name | category
------------+----------------+-----------
1501 | vivitar 35mm | electrncs
1502 | olympus camera | electrncs
1666 | harry potter | toys
1600
| play gym
| toys
1601 | lamaze
| toys
1700 | wait interface | books
(6 rows)
----结束

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
328

GBase 8s 产品可以支持多种语言、文化和代码集。由给定地域和编码中语言使用的与数字
数据、货币、日期和时间的字符集、整理和表示法相关的所有信息都集中在称为 Global
Language Support (GLS) 语言环境的单个环境中。
GBase 8s OLE DB Provider 遵循用于日期、时间和货币的 ISO 字符串格式,如 Microsoft™
OLE DB 标准所定义。可以通过设置 GBase 8s 环境变量或注册表项(如 DBDATE)来覆
盖该缺省值。
本出版物中的示例在编写时假设您使用以下某种语言环境:UNIX™ 平台上的 en_us.8859-
1 (ISO 8859-1) 。这些语言环境支持用于显示和输入日期、时间、数字和货币值的美国英
语格式约定。它们还支持 ISO 8859-1 代码集(在 UNIX 和 Linux™ 上),这些代码集包
括 ASCII 代码集以及很多 8 位字符(如 é、è 和 ñ)。
如果您计划在数据或 SQL 标识中使用其他语言环境中的字符,或者希望符合字符数据的
其他整理规则,那么可以指定其他语言环境。

使用“导入csv”功能,您可以将csv 文件数据导入到数据库中。
在“数据库导航”中,选择数据库标签下的数据库节点。该节点必须是当前连
接数据库节点。右键单击选择“导入数据库数据”,在弹出界面中点击“打开
文件”
,如下图所示

GBaseDataStudio 管理工具手册
- 26 -
南大通用数据技术股份有限公司
图5- 340 导入csv
选择文件类型csv
图5- 341 选择csv 文件
读取csv 文件后,
“来自文本文件的数据”tab 页显示如下内容

GBaseDataStudio 管理工具手册
南大通用数据技术股份有限公司
- 27 -
文件数据:从csv 文件中读取的原始数据
包围符:不填写,txt 文件导入时填写
分隔符:不填写,txt 文件导入时填写
换行符:不填写,txt 文件导入时填写
字段数:展示导入的字段数
行数:控制导入文件的行数
标题名:控制文件第一行是否是需要导入的数据
字符集:文件的字符集,选择完字符集后,需要重新点击“打开文件”
,选择文

预览:预览数据的内容
导入:开始导入按钮
“来自文本文件的数据”tab 如下面界面所示
图5- 342 来自文本文件的数据
读取csv 文件后,
“到数据库的数据”tab 页显示如下内容:
虚拟集群:选择导入的虚拟集群
数据库:选择导入的数据库
表:选择需要导入的表
(左边)字段:csv 文件中的字段
字段:数据库中的表字段

GBaseDataStudio 管理工具手册
- 28 -
南大通用数据技术股份有限公司
字段类型:自动匹配类型,不需要选择
日期格式:字段类型是Date 时,必须选择
“到数据库的数据”tab 页如下所示
图5- 343 到数据库的数据