SQLCA字段的描述

在大多数情况下,COBOL、C、PL/I和汇编语言对SQLCA字段使用相同的名称,而 Fortran 使用不同的名称。 然而,C、PL/I和汇编程序名称与COBOL不同的情况也有。

下表中的名称由SQL INCLUDE语句提供。

表 1. SQLCA字段
汇编程序、
COBOL 或
PL/I 名称

C
姓名

Fortran
名字

数据
类型


目的
SQLCAID sqlcaid 未使用。 CHAR(8) 存储转储的吸引眼球元素,包含文本“SQLCA”。 如果通过解析动态语句或本机SQL程序返回行号信息,则第六字节为“L”。 处理外部SQL程序时,第六字节未设置。
SQLCABC sqlcabc 未使用。 INTEGER 包含SQLCA的长度:136。
SQLCODE(见注释1) SQLCODE SQLCOD INTEGER 包含SQL返回代码。 (请参阅注 2)
code
均值
0
成功执行(尽管可能存在警告信息)。
成功执行,但有警告条件或其他信息。
负数
错误条件。
SQLERRML
(见注释3)
sqlerrml
(见注释3)
SQLTXL SMALLINT SQLERRMC的长度指示,范围为0到70。0表示SQLERRMC的值不相关。
SQLERRMC
(见注释3)
sqlerrmc
(见注释3)
SQLTXT VARCHAR(70) 包含一个或多个以X'FF' 分隔的标记,用于替换错误条件描述中的变量。 它可能包含截断的标记。 消息长度为70字节,可能被截断。
SQLERRP sqlerrp SQLERP CHAR(8) 提供产品签名,并在出错时提供诊断信息,例如检测到错误的模块名称。 在所有情况下,前三个字符都是“DSN”,代表 Db2 for z/OS®
SQLERRD(1) sqlerrd[0] SQLERR(1) INTEGER 对于敏感的静态光标 ,当光标位置在最后一行之后时(即当SQLCODE等于+100时),包含结果表中的行数。

在成功完成 SQL 过程后,包含 SQL 过程的返回状态值。

SQLERRD(1) 也可以包含一个内部错误代码。

SQLERRD(2) sqlerrd[1] SQLERR(2) INTEGER 对于敏感的静态光标 ,当光标位置在最后一行之后时(即当SQLCODE等于+100时),包含结果表中的行数。

SQLERRD(2) 也可以包含一个内部错误代码。

SQLERRD(3) sqlerrd[2] SQLERR(3) INTEGER 包含在DELETE、INSERT、UPDATE或MERGE语句后符合删除、插入或更新条件的行数。 该数字不包括受触发器、参照完整性约束影响的行,也不包括在处理BUSINESS_TIME期间的FOR PORTION OF子句时插入的行。 对于带有数据更改语句的 SELECT 或 SELECT INTO 语句,SQLERRD(3) 包含受嵌入数据更改语句影响的行数。 如果SQL语句失败,则值为0,表示在执行语句时所做的所有更改都被取消。

对于DELETE语句,如果操作是从分段表空间中的表中批量删除,且DELETE语句不包含选择条件,则值为 -1。 如果删除操作与视图相悖,则DELETE语句和视图的定义都不包含选择标准。

对于TRUNCATE语句,其值为 -1。

对于PREPARE语句,包含所选行的预计数量。 如果行数大于2,147,483,647,则返回2,147,483,647。

对于REFRESH TABLE语句,SQLERRD(3)包含插入到物化查询表中的行数。

对于行集导向的FETCH,包含获取的行数。

SQLERRD(3)(续)      

对于SQLCODES -911-913 ,SQLERRD(3)包含超时或死锁的原因代码。

当解析动态语句时遇到错误,或者当解析、绑定或执行本机 SQL 过程时,SQLERRD(3) 将包含遇到错误的行号。 SQLCAID的第六个字节必须是“L”,才能成为有效的行号。 只有当语句源包含新的行控制字符时,该值才有意义。 外部SQL程序不会返回此信息。

SQLERRD(4) sqlerrd[3] SQLERR(4) INTEGER 通常包含计时器,这是一个浮点小数值,用于粗略估算所需资源(见注释4)。 它并不反映所需时间的估计。 在编写动态定义的SQL语句时,您可以使用该字段作为已编写SQL语句的相对成本的指示器。 对于特定的语句,此数字可能会因目录中统计数据的更改而变化。 Db2 for z/OS 版本之间也可能存在差异。
SQLERRD(5) sqlerrd[4] SQLERR(5) INTEGER 包含PREPARE或EXECUTE IMMEDIATE语句语法错误的行或列。
SQLERRD(6) sqlerrd[5] SQLERR(6) INTEGER 包含一个内部错误代码。
SQLWARN0 SQLWARN0 SQLWRN(0) CHAR(1) 如果其他指示器未设置为警告状态(即其他指示器未包含W或Z),则包含一个空白。 如果至少有一个其他指标包含W或Z,则包含W。
SQLWARN1 SQLWARN1 SQLWRN(1) CHAR(1) 如果字符串列的值在赋给宿主变量时被截断,则包含一个W。 在OPEN CURSOR或ALLOCATE CURSOR语句后,包含一个表示不可滚动游标的N和一个表示可滚动游标的S。
SQLWARN2 SQLWARN2 SQLWRN(2) CHAR(1) 如果从聚合函数的参数中删除了空值,则包含 W;对于 MIN 函数,不一定要设置为 W,因为其结果不依赖于空值的删除。
SQLWARN3 SQLWARN3 SQLWRN(3) CHAR(1) 如果结果列的数量大于宿主变量的数量,则包含一个W。 如果关联定位器语句中提供的定位器少于存储过程返回的,则包含Z。
SQLWARN4 SQLWARN4 SQLWRN(4) CHAR(1) 如果准备好的UPDATE或DELETE语句不包含WHERE子句,则包含W。 对于可滚动光标,在OPEN CURSOR或ALLOCATE CURSOR语句后包含一个D表示灵敏动态光标,I表示不灵敏光标,S表示灵敏静态光标;如果光标不可滚动,则留空。
SQLWARN5 SQLWARN5 SQLWRN(5) CHAR(1) 如果SQL语句在 Db2 for z/OS 中不是有效的SQL语句,则包含W,表示该语句未被执行。 包含一个字符值,1(只读)、2(可读可删除)或4(可读可删除可更新),用于反映光标在OPEN CURSOR或ALLOCATE CURSOR语句后的能力。
SQLWARN6 SQLWARN6 SQLWRN(6) CHAR(1) 如果将月份或年份添加到日期或时间戳值会导致日期无效(例如,6月31日),则包含W。 表示日期已更改为当月的最后一天,以便使结果有效。
SQLWARN7 SQLWARN7 SQLWRN(7) CHAR(1) 如果用作十进制乘除运算操作数的数字的小数部分有一个或多个非零数字被删除,则包含一个W。
SQLWARN8 SQLWARN8 SQLWRX(1) CHAR(1) 如果无法转换的字符被替换为替代字符,则包含W。 如果尝试建立信任连接失败,则包含一个Y。
SQLWARN9 SQLWARN9 SQLWRX(2) CHAR(1) 如果在COUNT或COUNT_BIG处理过程中忽略算术异常,则包含W。 如果存储过程返回多个结果集,则包含一个Z。
SQLWARNA SQLWARNA SQLWRX(3) CHAR(1) 如果SQLCA或SQLDA名称或标签的至少一个字符字段因字符转换错误而无效,则包含W。
SQLSTATE sqlstate SQLSTT CHAR(5) 包含最近一次执行 SQL 语句的结果的返回代码(见注释 5)。
注:
  1. 在预编译器选项STDSQL(YES)启用的情况下,SQLCA中的SQLCODE会被SQLCADE取代。
  2. 有关SQL返回代码的具体含义,请参阅 SQL代码
  3. 在COBOL中,SQLERRM包括SQLERRML和SQLERRMC。 在PL/I和C中,长度不同的字符串SQLERRM等同于SQLERRMC前缀为SQLERRML的字符串。 在汇编程序中,存储区SQLERRM相当于SQLERRML和SQLERRMC。 请参阅所附SQLCA中各种主机语言的示例。
  4. 定时器可能需要特殊处理,因为它们是整数数组中的浮点值。 例如,在PL/I中,您可以先将值复制到与BIN FLOAT(24)变量一致的BIN FIXED(31)变量中。
  5. 有关SQLSTATE值的描述,请参阅 SQLSTATE值和常见错误代码