检查 FETCH 的结果

您可使用 SQLSTATE 变量来检查每一 FETCH 语句的结果。数据库服务器在每一 SQL 语句之后设置 SQLSTATE 变量。如果成功地返回一行,则 SQLSTATE 变量包含值 00000。如果未找到行,则数据库服务器设置 SQLSTATE 代码为 02000,表明 未找到数据,且当前行不变。下列条件将 SQLSTATE 代码设置为 02000,表明 未找到数据

数据库服务器从系统诊断区域的 RETURNED_SQLSTATE 域复制 SQLSTATE 代码。 GBase 8s 的客户机/服务器通信协议,诸如 SQLI 和 DRDA®,支持 SQLSTATE 代码值。要获取这些代码的列表,并获取关于如何获得消息文本的消息,请参阅 使用 SQLSTATE 错误状态代码。您可使用 GET DIAGNOSTICS 语句来直接地检验 RETURNED_SQLSTATE 域。系统诊断区域还可包含附加的错误信息。

您还可使用 SQL 通信区域(sqlca)的 SQLCODE 变量来确定相同的结果。

从 SPL 例程中的动态游标访存

使用 SPL 例程中的 FETCH 语句来检索指定的动态游标活动的集合的下一行,检索到一个在同一 SPL 例程中声明的 SPL 变量的有序列表内。

语法

SPL 例程中 FETCH 语句的语法是在 GBase 8s ESQL/C 例程中 FETCH 支持的语法的子集。

元素 描述 限制 语法
cursor_id 动态游标的名称 必须是打开的且已经在同一 SPL 例程中声明 标识符
output_var 存储来自该行的访存的值的 SPL 变量 必须在调用上下文中已经本地地或全局地声明,且必须为与访存的列值相兼容的数据类型 标识符

恰如在 ESQL/C 例程中那样,输出变量的列表必须与列值的数量、顺序和数据类型相一致,这些列值是 SQL 语句关联的由特定的游标返回的那些行。

所有 SPL 游标都是顺序游标。您的 UDR 必须包括检测游标的活动的集合到头的逻辑,因为在 SPL 中 NOTFOUND 条件不会自动地产生例外。

内建的 SQLCODE 函数,仅可从 SPL 例程调用的函数,可返回 FETCH 操作的状态代码。

对引用顺序选择游标或功能游标的 FETCH 语句的其他 ESQL/C 限制,也适用于 SPL 中的 FETCH 操作。

SPL 例程中的 FETCH 语句不支持下列 ESQL/C 特性:
  • 指定为主变量的游标名称
  • 位置规范或位置关键字(需要滚动游标)
  • 随同描述符或随同 sqlda 指针的 USING 子句。
在 SPL 语言中,不需要指示符变量。如果 FETCH 操作收到 NULL 值,则将收到访存的值的 SPL 变量设置为 NULL。

FETCH 语句仅可引用 DECLARE 语句定义的动态游标。cursor_id 不可指定 SPL 的 FOREACH 语句声明的直接游标的名称。