在执行 MERGE 时,目标表中的同一行不可被更新或被删除一次以上。在执行了 MERGE 语句之前,请勿尝试更新或删除尚未存在的目标中的任何行。即,没有同一 MERGE 语句插入到目标内的行的更新或删除。
MERGE INTO sale USING new_sale AS n ON sale.cust_id = n.cust_id WHEN MATCHED THEN UPDATE SET sale.salecount = sale.salecount + n.salecount WHEN NOT MATCHED THEN INSERT (cust_id, salecount) VALUES (n.cust_id, n.salecount);
cust_id | sale_count |
---|---|
Tom | 129 |
Julie | 230 |
cust_id | sale_count |
---|---|
Tom | 20 |
Julie | 3 |
Julie | 10 |
当通过指定表达式 sale.cust_id = new_sale.cust_id 作为匹配条件将 new_sale 合并至 sale 内时,MERGE 语句返回错误,因为它尝试超过一次更新 sale 目标表中的记录之一。
跨服务器的分布式 MERGE 操作可支持这些 DISTINCT 类型,仅当将 DISTINCT 类型显式地强制转型为内建的类型,且在每一参与的数据库中以完全相同的方式定义所有 DISTINCT 类型、其数据类型层级及其强制转型。要获取关于 GBase 8s 在跨服务器 DML 操作中支持的数据类型的附加信息,请参阅 跨服务器事务中的数据类型。
MERGE 不可访问另一 GBase 8s 实例的数据库,除非两个数据库实例都支持 TCP/IP 或 IPCSTR 连接,这定义在它们的 DBSERVERNAME 或 DBSERVERALIASES 配置参数中,以及在 sqlhosts 文件或 SQLHOSTS 注册子键中。此连接类型的要求适用于 GBase 8s 实例之间的任何通信,即使两个数据库服务器位于同一台计算机上。
MERGE 语句还支持通用客户端 API 中的 “分布式关系数据库架构”™(DRDA®)协议。对于MERGE 可从远程数据库通过 DRDA 协议返回的 GBase 8s 数据类型,要查看 DRDA 所支持(以及不支持)的 GBase 8s 数据类型的列表,请参阅 GBase 8s 管理员指南。