返回首页

gbase数据、南大通用产品文档:GBase8sSetConnect() 函数(Windows(TM))

更新日期:2024年09月11日

SetConnect() 函数仅在 Windows(TM) 环境中可用。它将该连接切换至指定的显式的连
接。

重要: 对于与 Windows(TM) 应用程序的 Version 5.01 GBase 8s ESQL/C 的兼容性,
GBase 8s ESQL/C 支持 SetConnect() 连接库函数。当您为 Windows(TM) 环境编写新的
GBase 8s ESQL/C 应用程序时,
请使用 SQL SET CONNECTION 语句来切换至另一活动的
连接。

语法

void *SetConnect ( void *CnctHndl)

CnctHndl
前面的 GetConnect() 调用已返回的连接句柄。

用法

SetConnect() 函数映射至简单的(不带有 DEFAULT 选项的)SQL SET
CONNECTION 语句。SetConnect() 调用等同于下列 SQL 语句:
EXEC SQL set connection db_connection;

在此示例中,db_connection 是 GetConnect() 函数已建立的现有连接的名称。您将此
db_connection 名称作为参数传递给 SetConnect() 函数。
它是您想要使其活动的连接的连接
句柄。

如果您传递空句柄,
则 SetConnect() 函数返回当前的连接句柄,
且不更改当前的连接。
如果当您传递空句柄时不存在当前的连接,则 SetConnect() 返回空。

例如,下列代码片段使用 SetConnect() 来将至 acctsrvr 数据库服务器上 accounts
数据库的连接(cnctHndl2)切换至 mainsrvr 数据库服务器上的 customers 数据库
(cnctHndl1):
void *cnctHndl1, *cnctHndl2, *prevHndl;


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 929 -

lish connection 'cnctHndl1' to customers@mainsrvr */
strcpy(InetLogin.InfxServer, "mainsrvr");
cnctHndl1 = GetConnect();
EXEC SQL database customers;

/* Establish connection 'cnctHndl2' to accounts@acctsrvr */
strcpy(InetLogin.InfxServer, "acctsrvr");
cnctHndl2 = GetConnect();
EXEC SQL database accounts;

prevHndl = SetConnect( cnctHndl1 );

重要: 由于 SetConnect() 函数映射至 SET CONNECTION 语句,因此,它设置
SQLCODE 和 SQLSTATE 状态代码,来指示该连接切换请求成功还是失败。此行为不同
于 Windows(TM) 的 Version 5.01 GBase 8s ESQL/C 中的 SetConnect(),其中,此函数未设
置 SQLCODE 和 SQLSTATE 值。

SetConnect() 函数取得连接名称的方式不同于 SET CONNECTION 语句。
SetConnect()
使用存储在连接句柄中的内部生成的名称。您必须指定此句柄作为 SetConnect() 调用的参
数。
该 SET CONNECTION 语句使用 CONNECT 语句的 AS 子句指定的用户定义的连接
名称。

重要: 由于 GetConnect() 函数映射至带有 WITH CONCURRENT TRANSACTION
子句的 CONNECT 语句,因此它允许带有打开的事务的显式的连接成为暂停的。在您的
GBase 8s ESQL/C 应用程序调用 SetConnect() 函数来切换至另一显式的连接之前,它不需
要确保提交了或回滚了当前的事务。

返回代码
CnctHndl
如果该函数已返回了当前为暂停的连接的连接句柄,则 SetConnect() 调用成功。
空指针
SetConnect() 调用不成功,指示未建立显式的连接。

gbase_parallel_threshold
取值:大于0(含0)的整数
默认值:10000
说明:计算并行度使用的参数,限制启用并行的最少行数。当scan 涉及的数据行
数<=参数gbase_parallel_threshold 时,不走并行。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

语法格式:
MERGE [INTO] [database_name.]table_name
USING table_reference
ON conditional_exp
[WHEN MATCHED THEN UPDATE SET col_name1=expr1 [, col_name2=expr2] ...
[WHEN NOT MATCHED THEN INSERT [(col_name3,...)] VALUES (expr3,...)]
参数说明如下:
MERGE [INTO] [database_name.]table_name 部分,table_name 必须是表,不可以是
视图,可以使用别名。
USING table_reference 部分,
table_reference 可以是表、
查询或视图,
只允许有一个,
可以使用别名。
UPDATE 部分不支持DELETE 子句。
UPDATE 部分和INSERT 部分不支持WHERE 子句。
UPDATE 部分和INSERT 部分可以省略,但不可以同时省略,否则报语法错误。
UPDATE 部分和INSERT 部分位置不可以颠倒。
INSERT 的VALUES 部分不允许使用MERGE 表
UPDATE 或INSERT 中的列如果出现多次,不会报错,后指定的列生效,但建议不
要依赖于该行为,避免这样使用。
不允许一对多更新:
如果MERGE 表中的一行与USING 表中的多行符合连接条件,
则报错。
示例1:

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 778
gbase> select * from t1 intersect select * from t2;
+------+-------+------------+--------+
| i | vc | d | dc |
+------+-------+------------+--------+
| 30 | third | 2013-09-04 | 11.216 |
+------+-------+------------+--------+

跨引擎DML 语句
GBase UP 支持跨引擎查询。