Db2 当sql返回多个值时,主机变量中将存储什么值

Db2 当sql返回多个值时,主机变量中将存储什么值,db2,cobol,mainframe,Db2,Cobol,Mainframe,在COBOLDB2程序中,在获得-811 sqlcode后,主机变量中将存储什么值。i、 e查询返回多行。不会将数据提取到主机变量,因为SQLCODE

在COBOLDB2程序中,在获得-811 sqlcode后,主机变量中将存储什么值。i、 e查询返回多行。

不会将数据提取到主机变量,因为SQLCODE<0表示存在错误。请参阅此链接:

您可以使用此类语句将单行数据检索到主机变量中。单行可以根据需要具有任意多的列。如果查询生成多行数据,则数据库服务器无法返回任何数据。它返回一个错误代码


不会将任何数据提取到主机变量,因为SQLCODE<0表示存在错误。请参阅此链接:

您可以使用此类语句将单行数据检索到主机变量中。单行可以根据需要具有任意多的列。如果查询生成多行数据,则数据库服务器无法返回任何数据。它返回一个错误代码


事实上,如果只使用这样的查询,就无法获取任何数据。在这种情况下,可以使用游标和FETCH语句。通过这种方式,可以将返回的行逐个读入主机变量。 简而言之,这是这样的:

declare cursor curs_name for select .... from....where .....
open curs_name
fetch curs_name into host_var
close curs_name 

所有这些说明都包含在EXEC SQL………..之间。。。。。。。。。。。结束执行。当然,每行必须提取一次。您可以检查SQLCODE以查看是否到达光标的末尾。您需要查找SQLCODE 100

事实上,如果只使用这样的查询,就无法获取任何数据。在这种情况下,可以使用游标和FETCH语句。通过这种方式,可以将返回的行逐个读入主机变量。 简而言之,这是这样的:

declare cursor curs_name for select .... from....where .....
open curs_name
fetch curs_name into host_var
close curs_name 

所有这些说明都包含在EXEC SQL………..之间。。。。。。。。。。。结束执行。当然,每行必须提取一次。您可以检查SQLCODE以查看是否到达光标的末尾。您需要查找SQLCODE 100

谢谢你的解释谢谢你的解释您得到了一个错误,系统在此上下文中处于不稳定状态。最好忽略你可能得到的任何东西,因为你无法判断它是否正确。我的意思是,考虑一下返回2个值的情况。有4个错误选项-1它未初始化或之前的值2它被设置为类型的默认值,如整数的0 3它是第二个值,但您确实想要第一个值4它是第一个值,但您确实想要第二个值。这会随着错误返回的额外行数的增加而增加…您得到了一个错误,该上下文的系统处于不稳定状态。最好忽略你可能得到的任何东西,因为你无法判断它是否正确。我的意思是,考虑一下返回2个值的情况。有4个错误选项-1它未初始化或之前的值2它被设置为类型的默认值,如整数的0 3它是第二个值,但您确实想要第一个值4它是第一个值,但您确实想要第二个值。这会随着错误返回的额外行数的增加而增加。。。