各种DB2数据类型的等效COBOL主机变量是什么?
问题:当主机变量和SELECT语句中的列数不匹配时,COBOL-DB2程序将如何工作?
解
如果列数和主机变量数不匹配,查询将失败。例如,如果我们在处理ORDERSDB2表的COBOL-DB2程序中使用了以下查询。
示例
EXEC SQL SELECT ORDER_ID, ORDER_AMOUNT, ORDER_DATE, ORDER_STATUS INTO :WS-ORDER-ID, :WS-ORDER-AMOUNT, :WS-ORDER-DATE, FROM ORDERS WHERE ORDER_DATE = ‘2020-09-15’ END-EXEC
列和主机变量的数量不匹配。SELECT语句中总共使用了4列,并且仅使用了3个主机变量。在这种情况下,查询将失败,并且可以通过两种方式检测这种情况。
如果不匹配,SQLCA的SQLWARN3字段将获得值“W”。
在某些安装中,当不匹配时,SQLCA的SQLCODE字段将错误代码显示为-804。
我们可以使用IF条件来检查SQLWARN3或SQLCODE中的值,并相应地指导程序处理。
以下是一个示例。
示例
IF SQLWARN3 = ‘W’ PERFORM X00-ABEND-SECTION ELSE PERFORM A100-SELECT-RESULT END-IF