3K+ 次浏览
DCLGEN 实用程序将 DB2 数据类型中的表列转换为具有等效 COBOL 数据类型的宿主变量。SMALLINT 和 INTEGER 转换为 COBOL 带符号数值类型,DECIMAL 转换为具有隐式小数位的 COBOL 带符号数值类型。以下是 SMALLINT、INTEGER 和 DECIMAL 的等效 COBOL 数据类型。DB2 数据类型 DB2 字节 COBOL 等效类型 COBOL 字节 SMALLINT 2 PIC S9(4) COMP-2 INTEGER 4 PIC S9(9) COMP-4 DECIMAL(x,y) INT(x/2) PIC S9(x-y)V9(y) INT(((p+q)/2) +1)
2K+ 次浏览
INCLUDE 和 COPY 语句的主要区别在于,使用 INCLUDE 语句的 PDS 成员在预编译期间展开,而使用 COPY 语句的 PDS 成员在编译期间展开。由于 DCLGEN 成员包含表的列名(表结构),因此有必要在预编译期间展开它。这是因为在预编译时,所有 SQL 语句都经过验证,放置在 DBRM 中,最后被相应的 COBOL 调用替换。如果 DCLGEN 成员使用 COPY 语句而不是 INCLUDE 语句,则在预编译期间会产生 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 参数才会被设置…… 阅读更多
SQLCA 代表 SQL 通信区域。它是 DB2 与 COBOL 程序进行通信的媒介。在一个典型的 COBOL-DB2 程序中,使用了许多 SQL 语句。SQLCA 的主要目的是将最近执行的 SQL 查询的状态和其他详细信息通知 COBOL 程序。SQLCA 的总长度为 136 字节,它由各种字段组成,例如 SQLCODE、SQLERRD、SQLWARN 等。这些字段中的每一个都提供最后执行的 SQL 查询的具体详细信息。例如,SQLCODE 返回 DB2 错误代码(如果有),SQLWARN 返回发出的警告…… 阅读更多
431 次浏览
非聚集索引正好与聚集索引相反。在非聚集索引中,不必具有相似索引键的数据行位于同一页上。如果我们必须遍历表,则此索引适用。例如,如果我们考虑索引键为整数 - 2、12、14 等的场景。那么非聚集索引结构如下所示:
1K+ 次浏览
在 DB2 表的聚集索引中,具有相似索引键的数据行(表行)存储在同一页上。例如,如果我们有 4 个索引键 - T5623、T5611、Z9786 和 Z9078。因此,具有相似键 T5623 和 T5611 的数据行将存储在同一页上,其他相似键 Z9786 和 Z9078 将一起存储在另一页上。聚集索引结构有两种类型的页,即索引页和数据页。索引页存储所有索引键值并指向数据页,因此…… 阅读更多
329 次浏览
根据标准 DB2 定义,时间戳在 DB2 存储中占用 10 个字节,在相应的 COBOL 存储中占用 26 个字节 (PIC X(26))。格式为 YYYY-MM-DDHH.MM.SS.NNNNNN。其中,YYYY:- 年 | MM:- 月 | DD:- 日 | HH:- 小时 | MM:- 分钟 | SS:- 秒 | NNNNNN:- 毫秒 根据问题中给出的场景,时间戳为“2020-07-01 23:14”。显然,时间戳的格式不正确,因为正确的格式是 YYYY-MM-DDHH.MM.SS.NNNNNN。在这种情况下,如果我们尝试将此格式不正确的时间戳插入定义为时间戳的 DB2 表列中…… 阅读更多
721 次浏览
为了维护 DB2 表的完整性,主键在整个表中始终是唯一的。例如,如果我们有一个存储所有订单的 DB2 表 ORDERS,并且表的原主键是列 ORDER_ID。那么只有一行可以具有特定订单 ID。这将有助于清晰地识别订单。如果我们尝试使用 COBOL-DB2 程序插入或更新具有重复主键的 DB2 表中的行,我们将得到 DB2 错误代码 -803。根据 IBM 文档 - 803 错误代码…… 阅读更多