南大通用GBase8s 常用SQL语句(144)
在应用中使用 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 语句是否导致数据库服务器的下列操作:
- 将它检测到的所有异常存储在诊断区域中
如果如此,则 GET DIAGNOSTICS 返回值 N。
- 检测到的异常多于它存储在诊断区域中的异常
如果如此,则 GET DIAGNOSTICS 返回值 Y。(MORE 的值通常为 N。)
使用 ROW_COUNT 关键字
ROW_COUNT 关键字返回最近执行的 DML 语句处理的行数。ROW_COUNT 对这些行计数:
- 插入到表内的行
- 在表中更新的行
- 从表删除的行
使用 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 字段。