在应用中使用 SQLSTATE
您可在程序中使用名为 SQLSTATE 的内建变量,无需声明。SQLSTATE 包含对错误处理不可或缺的状态代码,程序每一次执行 SQL 语句都会生成状态代码。自动地创建 SQLSTATE。您可检测 SQLSTATE 变量来确定 SQL 语句是否成功。如果 SQLSTATE 变量指出语句失败,则可执行 GET DIAGNOSTICS 语句来获取附加的错误信息。
要获取展现如何在程序中使用 SQLSTATE 变量的示例,请参阅 使用 GET DIAGNOSTICS 进行错误检查。
Statement 子句
Statement 子句

元素 | 描述 | 限制 | 语法 |
status_var | 主变量,用于接收关于指定的状态域名称的最近 SQL 语句的状态信息 | 必须与域的数据类型相匹配 | 特定于语言 |
在检索计数和溢出信息时,GET DIAGNOSTICS 可将这三个语句域的值存入对应的主变量。主变量数据类型必须与请求的域的数据类型相同。下列关键字表示这三个域。
域名称关键字 | 域数据类型 | 域内容 | ESQL/C 主变量数据类型 |
MORE | 字符 | Y 或 N | char[2] |
NUMBER | 整数 | 1 至 35,000 | int |
ROW_COUNT | 整数 | 0 至 999,999,999 | int |
使用 MORE 关键字
使用 MORE 关键字来确定最近执行的 SQL 语句是否导致数据库服务器的下列操作:
l 将它检测到的所有异常存储在诊断区域中
如果如此,则 GET DIAGNOSTICS 返回值 N。
l 检测到的异常多于它存储在诊断区域中的异常
如果如此,则 GET DIAGNOSTICS 返回值 Y。(MORE 的值通常为 N。)
使用 ROW_COUNT 关键字
ROW_COUNT 关键字返回最近执行的 DML 语句处理的行数。ROW_COUNT 对这些行计数:
l 插入到表内的行
l 在表中更新的行
l 从表删除的行
使用 NUMBER 关键字
NUMBER 关键字返回最近执行的 SQL 语句发生的异常的数量。根据计数得到的异常数,NUMBER 字段可保留从 1 至 35,000 的值。
EXCEPTION 子句
Exception 子句

元素 | 描述 | 限制 | 语法 |
exception_num | 异常的数量 | 从 1 至 35,000 的整数 | 精确数值 |
exception_var | 存储 exception_num 的变量 | 必须为 SMALLINT 或 INT | 特定于语言 |
information | 接收指定的异常域的值的主变量 | 数据类型必须与指定的字段的数据类型向匹配 | 特定于语言 |
exception_num 文字表示从 Statement 子句中的 NUMBER 字段返回的异常的数量的异常值之一。
在检索异常信息时,GET DIAGNOSTICS 将七个字段中的每一个的值写到相应的主变量内。这些域定位在诊断区域中,并从最近的 SQL 语句产生的异常派生而来。
主变量数据类型必须与请求的域的数据类型相同。下表描述这七个异常信息域。
域名称关键字 | 域数据类型 | 域内容 | ESQL/C 主变量数据类型 |
RETURNED_SQLSTATE | 字符 | SQLSTATE 值 | char[6] |
GBASEDBT_SQLCODE | 整数 | 特定于 GBase 8s 的状态代码 | int4 |
CLASS_ORIGIN | 字符 | 字符串 | char[255] |
SUBCLASS_ORIGIN | 字符 | 字符串 | char[255] |
MESSAGE_TEXT | 字符 | 字符串 | char[255] |
MESSAGE_LENGTH | 整数 | 数值 | int |
SERVER_NAME | 字符 | 字符串 | char[255] |
CONNECTION_NAME | 字符 | 字符串 | char[255] |
应用通过编号指定异常,或使用无符号的整数,或使用整数主变量(小数位为 0 的精确数值)。值为 1 的异常对应于由最近的 SQL 语句而不是 GET DIAGNOSTICS 设置的 SQLSTATE 值。其他异常编号与由 SQL 语句产生的其他异常之间的关联未定义。这样,不存在设置顺序,异常值依次顺序填充到诊断区域。您通常会得到至少一个异常,即使 SQLSTATE 值表示成功。
如果在 GET DIAGNOSTICS 语句内发生错误(即,如果请求了无效的异常编号),则将 GBase 8s 内部的 SQLCODE 和 SQLSTATE 变量设置为那个异常的值。此外,未定义 GET DIAGNOSTICS 字段。




