各种 DB2 数据类型对应的 COBOL 主机变量是什么?
问题:当 COBOL-DB2 程序中主机变量与 SELECT 语句中的列数不匹配时,程序会如何运行?
解决方案
如果列数和主机变量数不匹配,查询将失败。例如,如果我们在处理 ORDERS DB2 表的 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
广告