172 次浏览
在某些情况下,不使用 DCLGEN 成员,并且在工作存储区部分显式地完成主机变量声明。但是,由于这些显式声明,存在人为错误的可能性。其中一个错误是声明 COBOL 等效主机变量的错误数据长度。例如,主机变量应该声明为 PIC X(24),但错误地声明为 PIC X(14)。在这种情况下,当数据从 DB2 传输到 COBOL 程序时,由于接收主机变量的长度较短,列数据可能会被截断。我们可以检测... 阅读更多
2K+ 次浏览
DCLGEN 成员包含两组重要的数据。包含表中所有列定义的表结构。以等效 COBOL 数据类型声明的主机变量。除非我们在工作存储区部分显式地给出主机变量声明,否则包含 DCLGEN 成员不是强制性的。但始终将包含 DCLGEN 成员视为良好的编码实践,因为它还包含表结构,预编译器可以使用该结构执行查询列验证。尽管预编译器对查询列验证是可选的,但它可以在预编译阶段提供可能的错误... 阅读更多
SQLCA 的 SQLCODE 字段用于获取从 DB2 到 COBOL 程序的最后一个执行的 SQL 查询的返回代码。以下是 SQLCODE 字段可以采用的返回代码范围及其意义。SQLCODE = 0 → 查询成功执行,没有任何问题。SQLCODE > 0 → 执行查询时发出警告。SQLCODE < 0 → 执行查询时发生错误。以下是演示 SQLCODE 用法的示例段落。A010-CHECK-ORDER。EXEC SQL SELECT ORDER_DATE INTO :ORDER-DATE, FROM ORDERS ... 阅读更多
1K+ 次浏览
SQLCA 有助于 DB2 和 COBOL-DB2 程序之间的通信。SQLCA 具有多个字段,这些字段提供有关上次执行的 SQL 查询的不同信息。SQLCA 在 COBOL-DB2 程序中是必需的。但是,如果我们不使用 INCLUDE 语句提供 SQLCA,则程序编译将失败,并且我们将在日志中收到以下错误:“SQLCA 未定义为数据名称”
DATE、TIME 和 TIMESTAMP DB2 数据类型分别占用 4、3 和 10 字节。CHAR 数据类型占用的内存根据给定的大小占用。下表显示了 CHAR、DATE、TIME 和 TIMESTAMP 的等效 COBOL 数据类型。DB2 数据类型DB2 字节COBOL 等效项COBOL 字节CHAR(z)zPIC X(z)zDATE4PIC X(10)10TIME3PIC X(8)8TIMESTAMP10PIC X(26)26
3K+ 次浏览
DCLGEN 实用程序将表列从 DB2 数据类型转换为具有等效 COBOL 数据类型的主机变量。SMALLINT 和 INTEGER 转换为 COBOL 带符号数值类型,DECIMAL 转换为带有隐式小数的 COBOL 带符号数值。以下是 SMALLINT、INTEGER 和 DECIMAL 的等效 COBOL 数据类型。DB2 数据类型DB2 字节COBOL 等效项COBOL 字节SMALLINT2PIC S9(4) COMP2INTEGER4PIC S9(9) COMP4DECIMAL(x,y)INT(x/2)PIC S9(x-y)V9(y)INT(((p+q)/2) +1)
INCLUDE 和 COPY 语句之间的主要区别在于,使用 INCLUDE 语句的 PDS 成员在预编译期间扩展,而使用 COPY 语句的 PDS 成员在编译期间扩展。由于 DCLGEN 成员包含表的列名(表结构),因此有必要在预编译期间对其进行扩展。这是因为在预编译时,所有 SQL 语句都将被验证,放置在 DBRM 中,最后替换为适当的 COBOL 调用。如果使用 COPY 语句而不是 INCLUDE 语句提供 DCLGEN 成员,则在预编译期间会导致 DB2 警告,因为预编译器不会... 阅读更多
4K+ 次浏览
COBOL-DB2 程序可以查询/更新/插入/删除多个 DB2 表中的数据。但是,为了实现这一点,我们必须满足两个主要条件。将 DB2 表的结构通知给 COBOL-DB2 程序。这包括所有列以及这些列的数据类型。每个列的相应主机变量。主机变量用于程序逻辑中,将数据从 DB2 移动到程序,反之亦然。每个表列都有一个基于其数据类型的主机变量。例如,对于数据类型为 CHAR(2) 的表列,应该有一个具有... 阅读更多
601 次浏览
我们使用 SQLCA 的字段来查询最近执行的 SQL 查询的状态。SQLCODE 就是这样一个字段,它可以采用各种值,每个值都表示特定的错误代码。例如,-180 错误代码表示时间戳格式不正确。但是,在日志中我们只获得错误代码,每次我们都必须参考 IBM 文档以检查错误代码的描述。为了克服这个问题,我们使用 DSNTIAR。DSNTIAR 是 IBM 提供的内置实用程序,用于在 COBOL-DB2 程序中使用。此实用程序显示... 阅读更多
190 次浏览
COBOL-DB2 程序可以有多个 DB2 SQL 语句。为了在 COBOL-DB2 程序中为所有 SQL 语句实现通用的错误捕获,我们将使用 WHENEVER 语句。WHENEVER 语句可以根据 SQLCA 的 SQLCODE 字段中返回的值将控制权定向到错误处理部分或例程。例如,我们可以在 COBOL-DB2 程序中声明 WHENEVER 语句如下:EXEC SQL WHENEVER SQLERROR GOTO ERROR-ROUTINE END-EXEC在上面的示例中,只有当 SQLCODE 的值小于零时才会设置 SQLERROR 参数,这表示发生了一些错误... 阅读更多