各种 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

更新于:2020年12月1日

818 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告