返回首页

gbase数据、南大通用产品文档:GBase8s优化消息传输的错误

更新日期:2024年09月11日

当启用 OPTMSG 功能时,GBase 8s ODBC 不会对任何连接的语句执行错误处理。
如果您不确定某个特定语句是否会产生错误,则在代码中包含错误处理语句,并不要为此
语句启用消息链接。
当链接语句中发生错误后,
数据库服务器停止后续语句的执行。
例如,
在以下代码片段中,
它试图链接五条 INSERT 语句:
SQLExecDirect(hstmt, "create table tab1 (col1 INTEGER)", SQL_NTS);
/* enable message chaining */
SQLSetStmtOption(hstmt, SQL_INFX_ATTR_OPTMSG, 1);
/* these two INSERT statements execute successfully */
SQLExecDirect(hstmt, "insert into tab1 values (1)", SQL_NTS);
SQLExecDirect(hstmt, "insert into tab1 values (2)", SQL_NTS);
/* this INSERT statement generates an error because the data
* in the VALUES clause is not compatible with the column type */
SQLExecDirect(hstmt, "insert into tab1 values ('a')", SQL_NTS);
/* these two INSERT statements never execute */

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 200 -

SQLExecDirect(hstmt, "insert into tab1 values (3)", SQL_NTS);
SQLExecDirect(hstmt, "insert into tab1 values (4)", SQL_NTS);
/* disable message chaining */
SQLSetStmtOption(hstmt, SQL_INFX_ATTR_OPTMSG, 0);
/* commit work */
rc = SQLEndTran (SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
if (rc != SQL_SUCCESS)
在此示例中,会发生以下操作:
l
驱动程序将这五个 INSERT 语句和 COMMIT WORK 语句发送到数据库服务器执
行。
l
数据库将 1 和 2 的 col1 值插入到 tab1 表中。
l
第三条 INSERT 语句产生错误,因此数据服务器不会执行后续的 INSERT 语句或
COMMIT WORK 语句。
l
当队列到达 SQLEndTran 函数,驱动程序刷新消息队列。
l
SQLEndTran 函数,它是链接语句中的最后一条语句,返回失败的 INSERT 语句的
错误。
如果需要保存数据库服务器插入到 col1 的值,必须自己提交它们。
















GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 201 -

9 错误消息
本主题描述 GBase 8s ODBC Driver 错误消息。
本主题提供以下信息:
l 诊断 SQLSTATE 值
l 映射到 GBase 8s 错误消息的 SQLSTATE 值
l GBase 8s ODBC Driver 错误消息映射到特定的 SQLSTATE 值
有关错误消息的描述,请使用 finderr 实用程序。

使用 CREATE OPCLASS 语句为辅助存取方法创建运算符类。
该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素
描述
限制
语法
opclass
在此处声明的新的运
算符类的名称
在数据库内的运算符
类中必须是唯一的
标识符
sec_acc_method
新的运算符类与其关
联的辅助存取方法
必须已经存在且必须
sysams 表中注册
标识符

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 303
元素
描述
限制
语法
support_function
辅助存取方法需要的
支持函数
必须以存取方法所期
望的顺序列出
标识符
用法
运算符类是支持用于查询优化和构建索引的与辅助存取方法的运算符集合。辅助
存取方法(有时称为 索引存取方法)是构建、存取和操作索引结构(如 B-
tree 、R-tree 或 DataBlade 模块提供的索引结构)的一组数据库服务器函数。
数据库服务器提供 B-tree 和 R-tree 辅助存取方法。更多关于 btree 辅助存取方
法的信息,请参阅 缺省运算符类 。
当需要下列之一时定义一个新的运算符类:

索引为数据使用与缺省运算符类提供的顺序不同的顺序

与任何现有运算符类不同的一个运算符集合,这些运算符类与特殊的辅助
存取方法相关联
如果您包含了可选的 IF NOT EXISTS 关键字,且指定名称的运算符类已经当前
数据库中注册过,则数据库服务器不采取任何行动(而非向应用程序发送异
常)。
必须具有 Resource 权限或者必须是 DBA 才可创建运算符类。运算符类的实际
名称是 SQL 标识符。当创建运算符类时,opclass 名称必须在数据库内是唯一
的。
在兼容 ANSI 的数据库中创建运算符类时,owner.opclass 组合必须在数据库中是
唯一的。所有者名称是区分大小写的。如果不在 owner 名称旁边添加引号(或者
设置 ANSIOWNER 环境变量),则运算符类索引者名称以大写字母存储。
以下 CREATE OPCLASS 语句为 btree 辅助存取方法创建称为 abs_btree_ops 的
新的运算符类:
CREATE OPCLASS abs_btree_ops FOR btree
STRATEGIES (abs_lt, abs_lte, abs_eq, abs_gte, abs_gt)
SUPPORT (abs_cmp);
一个运算符类有两种运算符类函数:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 304

策略函数
在 CREATE OPCLASSS 语句的 STRATEGY 子句中指定运算符类的策略函数。
在先前的 CREATE OPCLASS 代码示例中,abs_btree_ops 运算符类有 5 个策略
函数。

支持函数
在 SUPPORT 子句中指定运算符类的支持函数。在先前的 CREATE OPCLASS
代码示例中,abs_btree_ops 运算符类有 1 个支持函数。
STRATEGIES 子句
策略函数是用户可以在 DML 语句内调用以对指定数据类型起作用的函数。查询
优化器使用策略函数确定给定的索引是否能够用以处理查询。
如果查询包含 UDF 或某个有索引的列,并且如果查询中的限制操作符与
STRATEGIES 子句中的任何函数都匹配,则查询优化器将考虑使用此索引进行查
询。更多查询计划的信息,请参阅 GBase 8s 性能指南 。
当创建新的运算符类时,STRATEGIES 子句将为辅助存取方法标识策略函数。每
个策略规范都列出策略函数的名称(以及可选的,它的参数的数据类型)。必须
以辅助存取方法所期望的顺序列出这些函数。关于 B-tree 索引的和 R-tree 索引
的缺省运算符类的策略运算符特顺序,请参阅 GBase 8s 用户定义的例程和数据
类型开发者指南 。
策略规范
STRATEGIES 关键字引入一个逗号分隔的,新运算符类的函数名或函数特征符列
表。此列表中的每个元素被称为策略规范并有如下的语法:
策略规范


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 305
元素
描述
限制
语法
input_type
策略函数的输入参数的
数据类型,您要为该策
略函数使用特定的辅助
存取方法
策略函数接受两个
输入参数,并且可
以有一个可选的输
入参数
数据类

output_type
策略函数的可选输出参
数的数据类型
副作用索引的可选
输出参数
数据类

strategy_function 与指定的运算符类相关
联的策略函数
必须以指定的辅助
存取方法所期望的
顺序列出
标识符
每个策略函数都是一个外部函数。CREATE OPCLASS 语句不验证您指定名称的
用户定义的函数是否存在。但是,对于要使用策略函数的辅助存取方法,外部函
数必须:

在共享库中编译

用 CREATE FUNCTION 语句在数据库中注册

(可选)除了策略函数名称外还可以指定其特征。策略函数需要两个输入
参数和一个可选的输出参数。要指定函数特征符,请指定:

为策略函数的两个输入参数的每一个都指定一个输入数据类型,从而该策
略函数可使用它们

(可选)为策略函数的输出参数指定一个输出数据类型
可以指定 UDT 和内置数据类型。如果不指定函数特征符,则数据库服务器假设
每个策略函数采用两个相同数据类型的参数并返回一个 BOOLEAN 值。
对边界效果数据的索引
边界效果数据是策略函数在包含该策略函数的查询后返回的附加值。例如,图像
DataBlade 模块可能使用模糊索引搜索图像数据。索引根据图像与搜索条件的接近
程序对它们进行排序。数据库服务器返回等级值作为对于合格图像的边界效果数
据 。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 306
SUPPORT 子句
支持函数是辅助存取方法在内部使用以构建和搜索索引的函数。在 CREATE
OPCLASS 语句的 SUPPORT 子句中为辅助存取方法指定这些函数。
必须以辅助存取方法所期望的顺序列出支持函数的名称。关于 B-tree 索引和 R-
tree 索引的缺省运算符类的支持运算符特定顺序,请参阅 缺省运算符类。
支持函数是外部函数。CREATE OPCLASS 不验证指定的支持函数是否存在。但是,
对于要使用支持函数的辅助存取方法,支持函数必须满足这些条件:

在共享库中编译

用 CREATE FUNCTION 语句在数据库中注册
缺省运算符类
每个辅助存取方法都有一个与之相关联的缺省运算符。缺省情况下,CREATE
INDEX 语句将缺省运算符与索引相关联。
例如,以下 CREATE INDEX 语句在 zipcode 列创建 B-tree 索引并自动将缺省
B-tree 运算符类与此列相关联:
CREATE INDEX zip_ix ON customer(zipcode)
对于 GBase 8s 提供的每个辅助存取方法,它提供缺省运算符类,如下:

缺省 B-tree 运算符类为内置运算符类。
数据库服务器为此运算符类执行运算符类函数并在数据库的系统目录中将
其注册为 btree_ops 。

缺省 R-tree 运算符类是已注册的运算符类
数据库服务器在系统目录表中将此运算符类注册为 rtree_ops 。数据库服
务器不为缺省 R-tree 运算符类执行运算符类函数。
重要: 要使用 R-tree 索引,必须安装空间 DataBlade 模块,如测量 DataBlade
模块或执行 R-tree 索引的任何第三方 DataBlade 模块。这些模块执行 R-tree 运
算符类函数。
DataBlade 模块可提供其它类型的辅助存取方法。如果 DataBlade 模块提供一个
辅助存取方法,则它可能还提供一个缺省运算符类。对于更多信息,请参阅
DataBlade 模块用户指南。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 307

GBA-01BR-0089
错误码
错误标识
错误显示信息
GBA-01BR-0089

get table id error
错误出现原因
获取table id 失败
分析与建议
检查目前数据库是否正常