返回首页

gbase数据、南大通用产品文档:GBase8aCONCAT_WS(separator,str1,str2,)

更新日期:2024年09月11日

函数说明
CONCAT_WS()代表CONCAT With Separator,是CONCAT()的特殊形式。第一个
参数是其它参数的分隔符,分隔符可以是一个字符,也可以是一个字符串或者是
一个参数。如果分隔符为NULL,则结果为NULL,函数会忽略分隔符后面参数
中的NULL 值。
示例
示例1:分隔符为“,”。
gbase> SELECT CONCAT_WS(',','First name','Second name','Last Name')
FROM dual;
+-------------------------------------------------------+
| CONCAT_WS(',','First name','Second name','Last Name') |
+-------------------------------------------------------+
| First name,Second name,Last Name
|
+-------------------------------------------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
684
示例2:分隔符为“,”,其中一个str 为NULL。
gbase> SELECT CONCAT_WS(',','First name',NULL,'Last Name') FROM
dual;
+----------------------------------------------+
| CONCAT_WS(',','First name',NULL,'Last Name') |
+----------------------------------------------+
| First name,Last Name
|
+----------------------------------------------+
1 row in set


在对象资源管理器中,依次展开服务器、“数据库”、“函数”,右击需要编写存储过
程脚本的表,再指向“编写函数脚本为”。

出现的快捷菜单中有三个编写脚本选项:“CREATE”、“DROP”、“EXECUTE”。选

GBase 8s 企业管理器用户手册
南大通用数据技术股份有限公司

52
择“CREATE”。

系统将打开一个新查询编辑器窗口,执行连接并显示完整的创建函数语句。

重试中止事务
在乐观并发控制(OCC)中,在COMMIT 阶段前的事务期间(使用任何隔离级别)不
会对记录进行锁定。这是一个能显著提高性能的强大优势。
它的缺点是,
如果另一个会话尝
试更新相同的记录,则更新可能会失败。
所以必须中止整个事务。这些所谓的更新冲突是由
MOT 在提交时通过版本检查机制检测到的。
使用悲观并发控制的引擎,如标准Postgres 和GBase 8c 基于磁盘的表,当使用
SERIALIZABLE 或REPEATABLE-READ 隔离级别时,也会发生类似的异常中止。
这种更新冲突在常见的OLTP 场景中非常少见,在使用MOT 时尤其少见。但是,由于
仍有可能发生这种情况,开发人员应该考虑使用事务重试代码来解决此问题。
下面以多个会话同时尝试更新同一个表为例,
说明如何重试表命令。
有关更多详细信息,
请参阅“OCC 与2PL 的区别举例”部分。下面以TPC-C 支付事务为例。
int commitAborts = 0;
while (commitAborts < RETRY_LIMIT) {
try {
stmt =db.stmtPaymentUpdateDistrict;
stmt.setDouble(1, 100);
stmt.setInt(2, 1);
stmt.setInt(3, 1);

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
459
stmt.executeUpdate();
db.commit();
break;
}
catch (SQLException se) {
if(se != null && se.getMessage().contains("could not serialize access due to
concurrent update")) {
log.error("commmit abort = " + se.getMessage());
commitAborts++;
continue;
}else {
db.rollback();
}
break;
}
}