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

    1. DATABASE 语句

使用 DATABASE 语句可打开一个能访问的数据库作为当前数据库。该语句是 SQL ANSI/ISO 标准的扩展。

语法

 

元素

描述

限制

语法

database

数据库的名称

数据库必须存在

数据库名 

用法

您可以使用 DATABASE 语句选择数据库服务器上的任何数据库。要选择另一台数据库服务器上的数据库,应指定数据库服务器的名称及数据库名。

如果用数据库名称包括当前(或另一个)数据库服务器的名称,则数据库服务器名称不可以大写。(有关指定数据库服务器名称的语法,请参阅数据库名。)

当数据库已打开时,发出 DATABASE 语句会在打开的新的数据库之前关闭当前的数据库。关闭当前数据库会释放数据库服务器的所有游标资源,使所有已声明至该点的游标无效。如果通过 SET SESSION AUTHORIZATION 语句更改了 user 规范,则在打开新数据库使会恢复原始的用户名。

如果先前的 CONNECT 语句已经和数据库建立了一个显式连接,而且该连接仍然是当前连接,那么在使用 DISCONNECT 语句关闭该显式连接之前,不能使用 DATABASE 语句(或任何创建隐式连接的语句)。

当前用户(或 PUBLIC)必须拥有对 DATABASE 语句中指定的数据库的“连接”特权。当前用户不可以拥有同数据库中现有角色相同的用户名。

DATABASE 语句在多语句 PREPARE 操作中是一个无效语句。

DATABASE 执行之后立即设置 SQLCA.SQLWARN (ESQL/C)

在 DATABASE 执行之后,您可以立即通过检查 sqlca 结构中的警告标志标识指定数据库的特征。

  1. 如果 sqlca.sqlwarn 的第一个字段为空白,则不发出任何警告。
  2. 如果被打开的数据库支持事务日志记录,则第二个 sqlca.sqlwarn 字段设置为字母 W。
  3. 如果数据库是一个兼容 ANSI 的数据库,则第三个字段设置为 W 。
  4. 如果数据库是 GBase 8s 数据库,则第四个字段设置为 W 。
  5. 如果数据库将所有的浮点数据转换成 DECIMAL 格式,则第五个字段设置为 W。(系统缺少 FLOAT 和 SMALLFLOAT 支持。)
  6. 如果数据库是数据复制对中的次触发器(即在只读方式下运行),则第七个字段设置为 W。
  7. 如果数据库DB_LOCALE 设置为一个不同于客户机系统上 DB_LOCALE 设置的语言环境,则第八个字段设置为 W 。

EXCLUSIVE 关键字

EXCLUSIVE 关键字以互斥方式打开数据库,并防止除当前用户之外的任何人访问。要允许其他人访问数据库,您必须先执行 CLOSE DATABASE 语句,然后在不带 EXCLUSIVE 关键字的情况下重新打开数据库。

以下语句以互斥方式打开 training 数据库服务器上的 stores_demo 数据库:

DATABASE stores_demo@training EXCLUSIVE;

如果另一个用户已打开指定的数据库,则拒绝互斥访问并返回一个错误,而且不打开任何数据库。

如果您遇到该错误,但是您无法确认是否有其它用户连接了此数据库,则在 Scheduler API 上运行由传感器或任务导致的非互斥访问。要暂时禁止此 Scheduler,您可以发出此 SQL 管理 API 命令:

EXECUTE FUNCTION admin('scheduler shutdown');

admin('scheduler shutdown') 例程执行完毕后,重新尝试 DATABASE ... EXCLUSIVE 语句。

有关 Scheduler API 命令的更多信息,请参阅 GBase 8s 管理员指南。有关调用 SQL 管理 API 函数必须持有的权限的信息,请参阅 GBase 8s 管理员参考手册

    1. DEALLOCATE COLLECTION 语句

使用 DEALLOCATE COLLECTION 语句释放先前通过 ALLOCATE COLLECTION 语句分配的集合变量的内存。

该语句是 SQL ANSI/ISO 标准的扩展。在 ESQL/C 中使用此语句。

语法

 

元素

描述

限制

语法

variable

标识要解除为其分配的内存的已归类的或未归类的集合变量的名称

必须是已分配的 GBase 8s ESQL/C 集合变量的名称

名称必须符合针对变量名称制定的语言特定规则

用法

DEALLOCATE COLLECTION 语句释放与 variable 标识的 GBase 8s ESQL/C 集合变量相关联的所有内存。您必须使用 DEALLOCATE COLLECTION 显式地释放集合变量的内存资源。否则,解除分配会在程序结束时自动发生。

DEALLOCATE COLLECTION 语句会释放已归类的和未归类的集合变量的资源。

提示: DEALLOCATE COLLECTION 语句只解除为 GBase 8s ESQL/C 集合变量分配的内存。要解除为 GBase 8s ESQL/C 行变量分配的内存,应使用 DEALLOCATE ROW 语句。

如果要解除分配一个不存在的集合变量或不是 GBase 8s ESQL/C 集合变量的变量,会导致错误。一旦解除分配一个集合变量,即可使用 ALLOCATE COLLECTION 来重新分配资源,然后重新使用一个集合变量。

此示例显示了如何使用 DEALLOCATE COLLECTION 语句解除分配给未归类的集合变量 a_set 的资源:

EXEC SQL BEGIN DECLARE SECTION;

                client collection a_set;

                EXEC SQL END DECLARE SECTION;

                . . .

                EXEC SQL allocate collection :a_set;

                . . .

                EXEC SQL deallocate collection :a_set;

相关示例,请参阅相关的概念,插入集合游标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值