SQL代码

Db2 执行SQL语句时,它会返回有关语句执行的信息。 这些信息包括SQL返回代码(SQLCODE)和SQLSTATE,它们表明语句执行是否成功。

SQLCODE

在执行完每条语句后,SQLCODE值由 Db2 设置,如下表所示。

SQLCODE值 含义 SQLCODE 描述
SQLCODE = 0 如果 SQLWARN0 为空,则视为成功执行。

如果 SQLWARN0 = 'W',则成功执行并发出警告。

000
SQLCODE = 100 未找到数据。 例如,FETCH语句没有返回数据,因为光标位于结果表最后一行的后面。 +100
SQLCODE > 0且不等于100 成功执行,并发出警告。 +sqlcode-num
SQLCODE < 0 执行不成功。 - sqlcode-num

如需 Db2 12 可能发出的SQL代码的PDF格式说明,请参阅 PDF文件图标 代码

应用程序如何接收SQL代码

包含可执行SQL语句的应用程序必须执行以下操作之一:

  • 将SQLCODE和SQLSTATE( Fortran 中的SQLCOD和SQLSTA)声明为独立的主机变量。 如果您指定了预编译器STDSQL(YES)或SQL语句协处理器选项,这些主机变量将接收返回代码,并且您不应在程序中包含SQLCA。
  • 提供一个名为SQLCA的结构。 SQLCA包括SQLCODE和SQLSTATE,以及其他状态信息。 您可以通过使用INCLUDE SQLCA语句来提供SQLCA。 您可以从应用程序中调用DSNTIAR示例子程序来格式化SQLCA的内容,也可以自行从SQLCA中检索字段。

无论应用程序提供的是SQLCA还是独立变量,在执行完每个SQL语句后,SQLCODE都由 Db2 设置。

SQL代码消息文本中的标记

在本节中,SQL返回代码消息文本中的斜体短语对应于SQLCA的SQLERRMC字段中返回的标记。 如果 Db2 返回多个标记,它们将按照在消息文本中出现的顺序依次显示在SQLERRMC中。 更改开始最多只能返回70字节的消息令牌,因为SQLCA的SQLERRMC字段限制为70字节。 使用带有 DB2 _ORDINAL_TOKEN_n 关键字来获取消息令牌的完整值。更改结束

在某些情况下,令牌不适用于或可用于特定错误,并且*N返回。

代币有时可能指加速器上的物体名称,而不是 Db2 上相关物体的名称。

SQLSTATE

在执行每个SQL语句后, Db2 也会设置SQLSTATE。 因此,应用程序可以通过测试SQLSTATE而不是SQLCODE来检查SQL语句的执行情况。 SQLSTATE(在FORTRAN中为SQLSTT)是SQLCA中一个5字节的字符串变量。

SQLSTATE为应用程序提供常见错误情况的通用代码(仅当错误或警告与产品相关时,SQLSTATE的值才与产品相关)。 此外,SQLSTATE的设计使应用程序能够测试特定的错误或错误类别。 所有 IBM® 关系数据库产品的编码方案都是相同的。