南大通用GBase8s 常用SQL语句(143)
使用 GET DIAGNOSTICS 语句来返回关于最近执行的 SQL 语句的诊断信息。
语法
用法
请随同 GBase 8s ESQL/C 使用此语句。
GET DIAGNOSTICS 语句检索数据库服务器记录在名为诊断区域中的指定的状态信息。使用 GET DIAGNOSTICS 不会更改诊断区域的内容。
GET DIAGNOSTICS 语句使用下列两个子句中的一个:
- Statement 子句返回关于最近的 SQL 语句生成的错误和警告的计数和溢出信息。
- EXCEPTION 子句提供关于最近的 SQL 语句生成的错误和警告的特定信息。
使用 SQLSTATE 错误状态代码
在执行 SQL 语句时,自动地生成错误状态代码。此代码表示success、failure、warning 或 no data found。该错误状态代码存储在名为 SQLSTATE 的内建变量中。
类和子类代码
SQLSTATE 状态代码是一个仅可包含数字和大写字母的五字符的字符串。
SQLSTATE 状态代码的前两个字符表示类。SQLSTATE 代码的后三个字符表示子类。图 1 展示 SQLSTATE 代码的结构。此示例使用值 08001,此处 08 是类代码,001 是子类代码。值 08001 表示 unable to connect with database environment 错误。
图: SQLSTATE 代码的结构
下列表时解释类代码值的快速参考。
SQLSTATE 类代码值 结果
00 成功
01 成功但有警告
02 找不到数据
> 02 错误或警告
SQLSTATE 支持 SQL 的 ANSI/ISO 标准
返回到 SQLSTATE 变量的所有状态代码都符合 ANSI,除了以下几种情况:
- 带有 01 类代码和以 I 开头的子类代码的 SQLSTATE 代码是特定于 GBase 8s 的警告消息。
- 带有 IX 类代码和任何子类代码的 SQLSTATE 代码是特定于 GBase 8s 的错误消息。
- 带有以从 5 到 9 中的一个数字或从 I 到 Z 中的一个大写字母开头的 SQLSTATE 代码,表示 SQL 的 ANSI/ISO 标准当前未定义的条件。唯一的例外是类代码为 IX 的 SQLSTATE 代码,这些代码是特定于 GBase 8s 的错误消息。
GBase 8s 的客户端/服务器通信协议,诸如 SQLI 和 DRDA®,支持这些 SQLSTATE 代码值。
SQLSTATE 代码列表
此表描述与 SQLSTATE 变量相关联的类代码、子类代码和所有有效警告和错误代码的含义。
类 | 子类 | 含义 |
00 | 000 | 成功。 |
01 | 000 | 成功但有警告。 |
01 | 002 | 断开连接错误。事务回滚。 |
01 | 003 | 在集合函数中消除的 NULL 值。 |
01 | 004 | 字符串数据,右截断。 |
01 | 005 | 项描述符区域不足。 |
01 | 006 | 未调用的权限。 |
01 | 007 | 未授予的权限。 |
01 | I01 | 数据库有事务。 |
01 | I03 | 选择了符合 ANSI 的数据库。 |
01 | I04 | 选择了GBase 8s 数据库服务器。 |
01 | I05 | 使用了浮点到十进制转换。 |
01 | I06 | GBase 8s 扩展到符合 ANSI 的语法。 |
01 | I07 | UPDATE 或 DELETE 语句没有 WHERE 子句。 |
01 | I08 | 使用 ANSI 关键字作为游标名称。 |
01 | I09 | 投影列表的基数与 INTO 列表的基数不相等。 |
01 | I10 | 运行在备用模式下的数据库服务器。 |
01 | I11 | 打开 Dataskip。 |
02 | 000 | 找不到数据。 |
07 | 000 | 动态的 SQL 错误。 |
07 | 001 | USING 子句与动态参数不匹配。 |
07 | 002 | USING 子句与目标规范不匹配。 |
07 | 003 | 不可执行游标规范。 |
07 | 004 | 动态参数需要 USING 子句。 |
07 | 005 | 准备好的语句不是游标规范。 |
07 | 006 | 违背受限的数据类型属性。 |
07 | 008 | 无效的描述符计数。 |
07 | 009 | 无效的描述符索引。 |
08 | 000 | 连接异常。 |
08 | 001 | 数据库服务器拒绝连接。 |
08 | 002 | 连接名称在用。 |
08 | 003 | 连接不存在。 |
08 | 004 | 客户端无法建立连接。 |
08 | 006 | 事务已回滚。 |
08 | 007 | 事务状态未知。 |
08 | S01 | 通信失败。 |
0A | 000 | 不支持的特性。 |
0A | 001 | 多服务器事务。 |
21 | 000 | 基数违反。 |
21 | S01 | 插入数据列表与列列表不匹配。 |
21 | S02 | 派生表的程度与列列表不匹配。 |
22 | 000 | 数据异常。 |
22 | 001 | 字符串数据,右截断。 |
22 | 002 | NULL 值,无指示符参数。 |
22 | 003 | 分数值超范围。 |
22 | 005 | 赋值错误。 |
22 | 027 | 数据异常调整错误。 |
22 | 012 | 除以零(0)。 |
22 | 019 | 无效的转义字符。 |
22 | 024 | 未终止的字符串。 |
22 | 025 | 无效的转义顺序。 |
23 | 000 | 完整性约束未被。 |
24 | 000 | 无效的游标状态。 |
25 | 000 | 无效的事务状态。 |
2B | 000 | 从属的权限描述符仍存在。 |
2D | 000 | 无效的事务终止。 |
26 | 000 | 无效的 SQL 语句标识符。 |
2E | 000 | 无效的连接名称。 |
28 | 000 | 无效的用户授权规范。 |
33 | 000 | 无效的 SQL 描述符名称。 |
34 | 000 | 无效的游标名称。 |
35 | 000 | 无效的异常号。 |
37 | 000 | 在PREPARE 或 EXECUTE IMMEDIATE 中的语法错误或访问违背。 |
3C | 000 | 重复的游标名称。 |
40 | 000 | 事务回滚。 |
40 | 003 | 语句完成未知。 |
42 | 000 | 语法错误或访问违背。 |
S0 | 000 | 无效的名称。 |
S0 | 001 | 基础表或视图表已存在。 |
S0 | 002 | 未找到基础表。 |
S0 | 011 | 索引已存在。 |
S0 | 021 | 列已存在。 |
S1 | 001 | 内存分配失败。 |
IX | 000 | GBase 8s 保留的错误消息。 |