ITPub博客

首页 > 数据库 > 国内数据库 > 南大通用GBase8s SQL常用SQL语句(二)

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

原创 国内数据库 作者:飞天小气球 时间:2021-07-21 11:16:07 0 删除 编辑

1.1  ALLOCATE COLLECTION 语句

使用 ALLOCATE COLLECTION 语句为集合数据类型的变量(例如 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 语句会将 SQLCODE   (也就是 sqlca.sqlcode )置零(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;

1.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 )包含一个或多个称为 item descriptors   的字段。每个项描述符都有一个数据库服务器可以接收或发送的数据值。项描述符也包含关于该数据的信息,例如数据类型、长度、小数位、精度和可以为 NULL 值。

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

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

WITH MAX 子句

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

当您使用此子句时,COUNT 字段设置为您指定的 items 数目。如果您不指定 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;

1.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 语句会将 SQLCODE   sqlca.sqlcode   的内容)置零(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 会假设它是无效的,并将其分配到新的内存位置。

1.4  ALTER ACCESS_METHOD 语句

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

语法

元素

描述

限制

语法

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;

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

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

设置(添加) am_rowids   标记

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

·  修改 am_costfactor  

官网:

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70002567/viewspace-2782431/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-06-23

  • 博文量
    15
  • 访问量
    5989