南大通用GBase8s 常用SQL语句(234)

1.1SET CONNECTION 语句
使用 SET CONNECTION 语句来重新建立在应用于数据库环境之间的连接,并使该连接成为当前连接。您还可随同 DORMANT 选项使用此语句来将当前的连接置于休眠状态。请以 GBase 8s ESQL/C 使用此语句。
语法
在这里插入图片描述

元素 描述 限制 语法
connection CONNECT 语句建立的初始连接的名称 数据库必须已存在 引用字符串
connection_var 包含 connection 值的主变量 必须为字符数据类型 特定于语言
用法
您可使用 SET CONNECTION 来使休眠连接成为当前连接,或使当前连接休眠。
SET CONNECTION 不是有效的准备好的语句。
使休眠连接成为当前的连接
如果您使用不带 DORMANT 选项的 SET CONNECTION 语句,则 connection 必须表示休眠连接。休眠连接是已建立但不是当前连接的连接。
不带 DOMANT 选项的 SET CONNECTION 语句使指定的休眠连接成为当前的连接。应用指定的连接必须是休眠的。当该语句执行时,当前的连接成为休眠的。
在下列示例中的 SET CONNECTION 语句使连接 con1 成为当前的连接,并使 con2 成为休眠的连接:
CONNECT TO ‘stores_demo’ AS ‘con1’;

CONNECT TO ‘demo’ AS ‘con2’;

SET CONNECTION ‘con1’;
休眠的连接有一连接上下文与它相关联。当应用使休眠的连接成为当前的时,它建立到数据库环境的那个连接,并恢复它的连接上下文。(要获取更多关于连接上下文的信息,请参阅在 CONNECT 语句 页上的 CONNECT 语句 语句。)重新建立连接与建立初始的连接是可比的,除了它典型地为用户避免再次认证许可,且它避免重新分配与初始的连接相关联的资源之外。例如,应用不需要准备在该连接中先前已准备好了的任何语句,也不需要重新声明任何游标。
使当前的连接成为休眠的连接
在 SET CONNECTION connection DORMANT 语句中,connection 必须表示当前的连接。带有 DORMANT 选项的 SET CONNECTION 语句使指定的当前连接成为休眠的连接。
例如,下列 SET CONNECTION 语句使连接 con1 休眠:
SET CONNECTION ‘con1’ DORMANT;
如果您指定一个已经是休眠的连接,则带有 DORMANT 选项的 SET CONNECTION 语句生成错误。例如,如果连接 con1 是当前的,而连接 con2 是休眠的,则下列 SET CONNECTION 语句返回错误消息:
SET CONNECTION ‘con2’ DORMANT;
下列 SET CONNECTION 语句成功地执行:
SET CONNECTION ‘con1’ DORMANT;
单线程环境中的休眠连接
在单线程 GBase 8s ESQL/C 应用(不使用线程的)中,DORMANT 选项使当前的连接成为休眠的。使用此选项使单线程的 GBase 8s ESQL/C 应用与线程安全的 GBase 8s ESQL/C 应用向上兼容。然而,在程序执行时,单线程的环境可仅有一个活动的连接。
在线程安全环境中的休眠连接
在线程安全的 GBase 8s ESQL/C 应用中,DORMANT 选项使活动的连接成为休眠的。现在另一线程可通过发出不带 DORMANT 选项的 SET CONNECTION 语句来使用该连接。在一个 GBase 8s ESQL/C 应用中,线程安全的环境可有许多线程(执行特别任务的工作的并发部分),且每一线程可有一个活动的连接。
活动的连接与特定的线程相关联。两个线程不可分享相同的活动的连接。一旦线程使活动的连接成为休眠的,其他线程就可使用那个连接。仍然建立休眠的连接,但当前休眠的连接不与任何线程相关联。例如,如果在名为 thread_1 的线程中名为 con1 的连接是活动的,则名为 thread_2 的线程不可使连接 con1 成为它的活动连接,直到 thread_1 已使连接 con1 成为了休眠的为止。
下列来自线程安全的 GBase 8s ESQL/C 程序的代码片段展示在线程安全的应用之内,特定的线程是如何使连接成为活动的,通过此连接在表上执行工作,然后再使该连接成为休眠的,以便其他线程可使用该连接:
thread_2()
{ /* 使 con2 成为活动的连接 /
EXEC SQL connect to ‘db2’ as ‘con2’;
/Do insert on table t2 in db2/
EXEC SQL insert into table t2 values(10);
/
使其他线程可使用 con2 */
EXEC SQL set connection ‘con2’ dormant;
}
如果使用 CONNECT . . . WITH CONCURRENT TRANSACTION 语句初始化了到数据库环境的连接,则随后连接到那个数据库环境的任何线程都可使用正在进行的事务。此外,如果开放的游标与这样的连接相关联,则当使该链接成为休眠的时,该游标保持打开。
在线程安全的 GBase 8s ESQL/C 应用之内的线程可通过使相关联的连接成为当前的来使用同一游标,即使在任何给定的时间仅一个线程可使用该连接。
标识连接
如果应用未在初始的 CONNECT 语句中指定连接名称,则您必须使用数据库环境(诸如数据库名称或数据库路径名称)作为连接名称。例如,下列 SET CONNECTION 语句为连接名称使用数据库环境,因为 CONNECT 语句不使用连接名称。要获取更多关于指定数据库环境的加引号的字符串的信息,请参阅 数据库环境。
CONNECT TO ‘stores_demo’;

CONNECT TO ‘demo’;

SET CONNECTION ‘stores_demo’;
然而,如果为到数据库服务器的连接指定连接名称,则您必须使用该连接名称来重新连接到数据库服务器。当连接名称存在时,如果您使用数据库环境而不是连接名称,则返回错误。
DEFAULT 选项
DEFAULT 选项指定 SET CONNECTION 语句的缺省的连接。缺省的连接是下列连接之一:
显式的缺省连接(以 CONNECT TO DEFAULT 语句建立的连接)
隐式的缺省连接(以 DATABASE 或 CREATE DATABASE 语句建立的任何连接)
使用不带 DOMANT 选项的 SET CONNECTION 来重新建立缺省的连接,或以那个选项来使缺省的连接成为休眠的。
要获取更多信息,请参阅 缺省连接规范 和 使用 DATABASE 语句的隐式连接。
CURRENT 关键字
使用 SET CONNECTION 语句的带有 DORMANT 选项的 CURRENT 关键字作为标识当前连接的简写形式。CURRENT 关键字替代当前的连接名称。如果当前的连接是 con1,则下列两个语句是等同的。:
SET CONNECTION ‘con1’ DORMANT;

SET CONNECTION CURRENT DORMANT;
当事务是活动的时
不带有 DORMANT 关键字,SET CONNECTION 隐式地将当前的连接置于休眠状态。
当您发出带有 DORMANT 关键字的 SET CONNECTION 语句时,SET CONNECTION 语句显式地将当前的连接置于休眠状态。在两种情况下,如果成为休眠的连接有一未提交的事务,则该语句可失败。如果成为休眠的连接有一未提交的事务,则适用下列条件:
如果使用 CONNECT 语句的 WITH CONCURRENT TRANSACTION 子句建立了连接,则 SET CONNECTION 成功并将该连接置于休眠状态。
如果该连接不是通过 CONNECT 语句的 WITH CONCURRENT TRANSACTION 子句建立了的,则 SET CONNECTION 失败且不可将该连接设置为休眠状态,且当前的连接中的事务继续为活动的。该语句生成错误且应用必须决定是提交还是回滚活动的事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值