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) z PIC X(z) z DATE 4 PIC X(10) 10 TIME 3 PIC X(8) 8 TIMESTAMP 10 PIC X(26) 26
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)
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 参数… 阅读更多