资讯详情

GBase 8s SQL 指南:语法————2.1 SQL 语句

本章描述了原因GBase8s识别的SQL语句的语法和定义。

这些SQL按字母顺序显示句子描述。

对某些句子,重要的语义详细信息显示在本文档的其他卷中,如交叉引用所指出。

许多句子、语法图和/或紧跟语法图后的项表,包括了对数据类型和表达式或其它语法段中引用语法段。

当SQL语句的名称包括小写字符(如“SETDatabaseObjectMode”)时间。表示语句名称中的第一个混合大小写的字符串不是SQL关键字代表两个或两个以上的不同SQL关键字可以跟在前面大写关键词后面。

请参考句子描述的结构描述SQL语法概述。

2.1ALLOCATECOLLECTION语句

使用ALLOCATECOLLECTION语句是集合数据类型的变量(例如LIST、MULTISET或SET)或未归类的集合变量分配内存。

语法

元素

描述

限制

语法

variable

要分配的已归类的或 未归类的集合变量的 名称

必须为未分配的 GBase 8s ESQL/C 集合类型主变量

特定于语言 的名称规则

用法

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

ALLOCATE COLLECTION  语句为可以存储 collection  数据类型的值的 ESQL/C  变量分配内存。

要为 GBase 8s ESQL/C  程序创建集合变量:

1.   在 GBase 8s ESQL/C  程序中作为客户机集合变量声明集合变量。 集合变量可以是已归类或未归类的集合变量。

2.    使用 ALLOCATE COLLECTION  语句为集合变量分配内存。

如果分配内存成功, ALLOCATE COLLECTION  语句会将   (也就是 )置

零(0); 如果失败,会将其设置成一个负数错误码。

当不再需要集合变量时, 您必须使用 DEALLOCATE COLLECTION 语句显示地释放内存。在 DEALLOCATE COLLECTION 语句执行成功后,您可以重新使用该集合变量。

提示:  ALLOCATE COLLECTION 语句仅为 GBase 8s ESQL/C 集合变量分配内存。要为 GBase 8s ESQL/C 行变量分配内存, 请使用 ALLOCATE ROW 语句。

示例

以下示例显示如何使用 ALLOCATE COLLECTION  语句为未归类的集合变量 a_set 分配资源:

EXEC SQL BEGIN DECLARE SECTION;

client collection a_set;

EXEC SQL END DECLARE SECTION;

. . .

EXEC SQL allocate collection :a_set;

以下示例显示如何使用 ALLOCATE COLLECTION  语句为已归类的集合变量 a_typed_set  分配资 源:

EXEC SQL BEGIN DECLARE SECTION;

client collection set(integer not null) a_typed_set;

EXEC SQL END DECLARE SECTION;

. . .

EXEC SQL allocate collection :a_typed_set;

2.2 ALLOCATE DESCRIPTOR 语句

使用 ALLOCATE DESCRIPTOR  语句为系统描述符区域(SDA)声明和分配内存。在 ESQL/C  中 使用此语句。

语法

元素

描述

限制

语法

descriptor

未分配的系统描述符 区域的名称

包含在单引号 ( ' )  中。在 SDA 名称中必 须是唯一的

引用字符 串.

descriptor_var

用来存储系统描述符 区域名称的主机变量

必须包含未分配系统 描述符区域的名称

特定于语 言

items

descriptor 中项描述 符的数目。缺省值为  100 。

必须是大于零的无符 号 INTEGER

精确数值

items_var

包含项目数目的主变 量

数据类型必须为      INTEGER 或 SMALLINT

特定于语 言

用法

ALLOCATE DESCRIPTOR  语句创建新的系统描述符区域,该区域是内存中的一个位置, 存放 DESCRIBE  语句可以显示的信息,或存放关于查询的 WHERE  子句的信息。

系统描述符区域(SDA)包含一个或多个称为 itemdescriptors  的字段。每个项描述符都有一个数 据库服务器可以接收或发送的数据值。项描述符也包含关于该数据的信息, 例如数据类型、长度、 小数位、精度和可以为 NULL  值。

系统描述符区域存放 DESCRIBE ... USING SQL DESCRIPTOR  语句获取的信息,或者存放关于一 个动态执行语句中的 WHERE  子句的信息。

如果您分配一个系统描述符区域的名称与一个现有系统描述符区域的名称相同,则数据库服务器返 回一条错误消息。如果您使用 DEALLOCATE DESCRIPTOR  语句释放了该描述符,则           ALLOCATE DESCRIPTOR  语句可以重新使用同样的描述符名称。

  子句

您可以使用 WITH MAX  子句标识您需要的项描述符的最大数目。

当您使用此子句时, COUNT  字段设置为您指定的   数目。如果您不指定 WITH MAX  子句, COUNT  字段的缺省值为 100 。您可以使用 SET DESCRIPTOR  语句更改 COUNT  字段的值。

ALLOCATE DESCRIPTOR  语句示例

以下示例显示了有效的 ALLOCATE DESCRIPTOR 语句。每个示例都包含 WITH MAX 子句。此示例使 用嵌入的变量名称标识系统描述符区域, 并指定所需的项描述符:

EXEC SQL allocate descriptor :descname with max :occ;

下一示例使用加引号的字符串 desc1  作为系统描述符的标识, 并且使用无符号整数 3 指定该 desc1  区域中所需的项描述符的最大数目:

EXEC SQL allocate descriptor 'desc1' with max 3;

2.3 ALLOCATE ROW 语句

使用 ALLOCATE ROW  语句为 row  变量分配内存。该语句是 SQL ANSI/ISO  标准的扩展。在 ESQL/C  中使用此语句。

语法

元素

描述

限制

语法

variable

要分配的已归类或未  归类的 row变量名称

必须为未分配的 GBase 8s

ESQL/C row 类型主变量

特定于 语言

用法

ALLOCATE ROW 语句为存储 row 类型数据的主变量分配内存。要创建 row 变量, ESQL/C 程序必须 执行以下操作:

1.   声明 row  变量。 row  变量可以是已归类或未归类的 row  变量。

2.   使用 ALLOCATE ROW  语句为 row  变量分配内存。

以下示例显示如何使用 ALLOCATE ROW 语句为已归类的 row变量 a_row 分配资源:

EXEC SQL BEGIN DECLARE SECTION;

row (a int, b int) a_row;

EXEC SQL END DECLARE SECTION;

. . .

EXEC SQL allocate row :a_row;

如果内存分配操作成功, 则 ALLOCATE ROW  语句会将   (  的内容) 置

零(0); 如果分配失败, 会将其设置为一个负的错误码。

您必须使用 DEALLOCATE ROW 语句显示地释放内存。一旦您使用 DEALLOCATE ROW 语句释放了该 row变量, 您就可以重新使用该 row变量。

提示:  ALLOCATE ROW 语句仅为 GBase 8s ESQL/C row 变量分配内存。要为 GBase 8s ESQL/C collection变量分配内存,请使用 ALLOCATE COLLECTION 语句。

当您在多次函数调用中使用同一 row  变量而未对其解除分配时,会导致客户机计算机上的内存泄 露。因为没有办法确定指针在传递时是否是有效的,所以 GBase 8s ESQL/C  会假设它是无效的, 并将其分配到新的内存位置。

2.4 ALTER ACCESS_METHOD 语句

可以使用 ALTER ACCESS_METHOD  语句更改一个或多个   系统目录表中用户定义的主或 从的存取方法的属性。

语法

元素

描述

限制

语法

access_method

要更改的

存取方法

的名称

存取方法必须由先前的      CREATE ACCESS_METHOD 语句 在 sysams 系统目录表中注  册

标识符

owner

存取方法

所有者的

名称

必须拥有该存取方法

所有者名称

purpose

_keyword

表示要更

改的特征

的关键字

关键字必须通过先前的

CREATE 或 ALTER

用途函数、标 志和值

元素

描述

限制

语法

ACCESS_METHOD 语句和存取 方法相关联

用法

该语句是 SQL ANSI/ISO  标准的扩展。该语句无法修改内置的存取方法。

使用 ALTER ACCESS_METHOD  更改用户定义存取方法的定义。您无法修改内置的存取方法。

您必须是该存取方法的所有者或具有修改用户定义存取方法的 DBA  特权。在符合 ANSI  的数据 库中, 如果另一个用户是该存取方法的所有者,那么 DBA  必须限定该存取方法的名称。

当更改存取方法时, 您同时更改了定义该存取方法的目的选项规范(目的函数、目的标志或目的   值)。例如,您可以更改一个存取方法以分配一个新的用户定义的函数或方法名称,或为一个表的 扫描成本提供乘数。

如果事务正在处理中,则数据库服务器将等待修改存取方法, 直接提交或回滚该事务。该事务完成 之前, 其他任何用户都无法执行该存取方法。

示例

以下语句更改了 remote 用户定义的存取方法:

ALTER ACCESS_METHOD remote

ADD am_scancost = FS_scancost,

ADD am_rowids,

DROP am_getbyid,

MODIFY am_costfactor = 0.9;

上述示例将对该存取方法进行以下修改:

⚫         添加一个称为    的用户定义的函数或方法, 它在   表中与   关键字向关联。

⚫         设置(添加)    标记

⚫         删除与   关键字相关联的用户定义的函数或方法

•    修改   值

2.5 ALTER FRAGMENT 语句

可以使用 ALTER FRAGMENT  语句更改现有表或索引的分布策略或存储位置。该语句是 SQL ANSI/ISO  标准的扩展。

语法

元素

描述

限制

语法

surviving _index

用于修改分布或存储 的索引

当该语句执行时必须存在

标识符

surviving _table

用于修改分布或存储 的表

必须存在。请参阅 对 ALTER FRAGMENT 语句的限制

标识符

用法

ALTER FRAGMENT  语句仅适用于位于当前站点的表分片或索引分片。不会存储或更新任何远程 信息。

要更改一个表的分片存储策略, 您必须具有 Alter 或 DBA 特权。要更改一个索引的分段存储策 略,您必须具有 Index 或 DBA 特权。

Attention:  此语句可能导致索引被删除或重建。执行更改操作之前, 请仔细阅读 GBase 8s 性能

指南 中的相应章节以查看影响和策略。

ALTER FRAGMENT  语句的子句支持以下任务。

子句       作用

ATTACH      将两个或多个具有相同模式的表组合到一个分片表中

DETACH      将一个表分片从分片存储策略中拆离, 并将其置于一个新表中

INIT              提供以下选项:

•     定义并初始化一个表上的分片存储策略

•     更改对分片表达式求值的顺序

•     更改表或索引的分片存储策略

•     更改现有表的存储位置

•    将数据从现有的表分片移到另一个新的分片表中

•     更改数据库给表或索引生成的分片存储位置

•     更改表或索引的分片键或分片表达式

ADD            将另一个分片添加到一个现有分片存储列表

锐单商城 - 一站式电子元器件采购平台