南大通用GBase8s 常用SQL语句(120) DISCONNECT 语句

使用 DISCONNECT 语句终止应用程序和数据库服务器之间的连接。

语法

 

元素

描述

限制

语法

connection

指定要终止的连接的字符串

CONNECT 语句指定的连接名称

引用字符串

connection_var

持有连接名称的主变量

必须是一个固定长度的字符数据类型

特定于语言

用法

DISCONNECT 终止到数据库服务器的连接。如果数据库是打开的,则在连接断开之前该数据库会关闭。即使只连接到一个特定的数据库,DISCONNECT 也会终止到数据库服务器的连接。如果 DISCONNECT 没有终止当前的连接,则不会更改当前环境的连接上下文。

DISCONNECT 在 PREPARE 语句中作为语句文本是无效的。

在 ESQL/C ,如果您使用 connection 或 connection_var 断开连接,那么在指定的连接不是当前连接或休眠连接的情况下,DISCONNECT 会生成一个错误。 

DEFAULT 选项

DISCONNECT DEFAULT 断开缺省连接。

缺省连接是指以下一种连接:

  1. 由 CONNECT TO DEFAULT 语句建立的连接
  2. 由 DATABASE 或 CREATE DATABASE 语句建立的隐式缺省连接

您可以使用 DISCONNECT 断开缺省连接。如果 DATABASE 语句没有指定数据库服务器(如下例所示),则缺省数据库服务器建立缺省的连接:

EXEC SQL database 'stores_demo';

          . . .

          EXEC SQL disconnect default;

如果 DATABASE 语句指定了数据库服务器(如下例所示),则向该数据库服务器建立缺省的连接:

EXEC SQL database 'stores_demo@mydbsrvr';

          . . .

EXEC SQL disconnect default;

在以上任何一种情况下,DISCONNECT 的 DEFAULT 选项会断开这个缺省的连接。有关更多信息,请参阅缺省连接规范。

指定 CURRENT 关键字

DISCONNECT CURRENT 语句终止当前的连接。例如,以下程序段中的 DISCONNECT 语句终止到数据库服务器 mydbsrvr 的当前连接:

CONNECT TO 'stores_demo@mydbsrvr';

        . . .

DISCONNECT CURRENT;

当事务活动时

DISCONNECT 在事务期间生成一个错误。事务仍处于活动状态,并且应用程序必须显式地提交或回滚该事务。如果在没有发出 DISCONNECT 的情况下应用程序终止(例如是由于系统故障或程序错误),则会回滚活动的事务。

但是,在兼容 ANSI 的数据库中,如果在非交互方式下没有发出 CLOSE DATABASE 、COMMIT WORK 或 DISCONNECT 语句便退出 DB-Access 时没有遇到错误,则数据库服务器自动提交任何打开的事务。

在线程安全环境中断开连接

如果您在线程安全的 GBase 8s ESQL/C 应用程序中发出 DISCONNECT 语句,请记住活动的连接只可以从它活动所在的线程内被断开。因此,一个线程无法断开另一个线程的活动连接。如果进行这种尝试,DISCONNECT 语句会生成一个错误。

但是一旦连接变为休眠状态,任何其它线程即可断开该连接,除非有一个正在进行的事务与使用 CONNECT 的 WITH CONCURRENT TRANSACTION 子句建立的休眠连接相关联。如果休眠的连接不是用 WITH CONCURRENT TRANSACTION 子句建立的,则 DISCONNECT 会试图在断开连接时生成一个错误。

有关对线程安全的 GBase 8s ESQL/C 应用程序中的连接的解释,请参阅 SET CONNECTION 语句。

指定 ALL 选项

使用关键字 ALL 终止至该时刻为止由应用程序建立的所有连接。例如,下面的 DISCONNECT 语句断开当前的连接以及所有休眠的连接:

DISCONNECT ALL;

在 GBase 8s ESQL/C 中,ALL 关键字对多线程的应用程序的效果同对单线程应用程序的效果相同。执行 DISCONNECT ALL 语句会引起所有线程中的所有连接终止。但是,如果任何一个连接正在使用中,或者有一个与该连接相关联的正在处理的事务,则 DISCONNECT ALL 语句失败。如果这些条件中的任何一个为真,则不会断开任何连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值