找到 150 篇文章 适用于 DB2

在多行提取的情况下,主机变量的用途是什么?

Mandalika
更新于 2020年9月15日 10:55:55

199 次查看

主机变量需要声明为数组才能进行多行提取。此外,我们需要在工作存储区中定义另一个变量,其配置为 S9(4) COMP,它将存储在单个提取调用中要提取的行数的值。我们可以为该变量指定任何名称,这里我们使用了 MAX-ROW。以下是声明主机变量数组和 MAX-ROW 的示例。01 ORDER-ID PIC X(25) OCCURS 25 TIMES。01 MAX-ROW PIC S9(4) COMP VALUE 25。我们将如下提取游标。EXEC SQL    FETCH NEXT ROWSET FROM ORDER_CUR FOR ... 阅读更多

您将如何在单个 FETCH 调用中从 DB2 表中提取多行?

Mandalika
更新于 2020年9月15日 10:51:31

903 次查看

我们可以使用多行提取的概念,在单个 FETCH 调用中从 DB2 表中提取多行。在多行提取中,我们必须使用“WITH ROWSET POSITIONING”子句声明游标。在这种情况下,主机变量应声明为数组。因此,在单个提取语句中,主机变量数组将填充多个行数据。我们可以遍历主机变量数组以访问此行数据。例如,我们可以如下声明多行提取游标:EXEC SQL    DECLARE ORDER_CUR WITH ROWSET POSITIONING FOR   ... 阅读更多

如何从未打开的游标中提取数据或打开已打开的游标?

Mandalika
更新于 2020年9月15日 10:49:03

130 次查看

当我们尝试从未打开的游标中提取数据时,查询将失败。在这种情况下,SQLCA 的 SQLCODE 字段将填充 DB2 错误代码 -501。根据 IBM 文档,-501 错误代码表示: “FETCH 或 CLOSE 语句中识别的游标未打开”当我们尝试打开已打开的游标时,查询将失败,并且我们将在 SQLCA 的 SQLCODE 字段中获得错误代码 -502。根据 IBM 文档,-502 错误代码表示: “FETCH 或 CLOSE 语句中识别的游标已打开”... 阅读更多

是否可以在我们对 2 个表 ORDERS 和 TRANSACTIONS 使用 JOIN 的游标中进行更新?为什么或为什么不?我们如何继续更新这些表中的任何一个?

Mandalika
更新于 2020年9月15日 10:47:15

62 次查看

当我们在游标声明中使用一个(自连接)或多个表上的 JOIN 时,将创建一个只读游标。我们无法更新只读游标。如果我们想要更新 JOIN 中使用的任何表,则必须为所有表声明一个单独的游标,并且必须构建一个单独的逻辑来更新每个 DB2 表。

在 COBOL-DB2 程序中,如何使游标在触发 COMMIT 后保持打开状态?

Mandalika
更新于 2020年9月15日 10:45:44

2K+ 次查看

每当我们发出 COMMIT 语句时,所有打开的游标都将关闭。当我们在使用游标时必须在 UPDATE 后频繁使用 COMMIT 语句时,这是一个非常常见的情况。在这种情况下,我们可以在游标声明期间使用“WITH HOLD”子句。“WITH HOLD”子句即使在触发 COMMIT 语句后也将使游标保持打开状态。我们可以如下给出“WITH HOLD”子句。EXEC SQL       DECLARE ORDER_CUR CURSOR WITH HOLD FOR          SELECT ORDER_ID, TRANSACTION_ID FROM ORDERS             WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC

“WHERE CURRENT OF”子句在 COBOL-DB2 程序中的目的和用途是什么?

Mandalika
更新于 2020年9月15日 10:42:45

5K+ 次查看

“WHERE CURRENT OF”子句将在执行 UPDATE 语句后对该行放置独占锁。“WHERE CURRENT OF”子句将指向游标最近提取的行。我们可以使用“WHERE CURRENT OF”如下方式更新游标中的行。游标定义。EXEC SQL DECLARE ORDER_CUR CURSOR FOR SELECT ORDER_ID, TRANSACTION_ID FROM ORDERS WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC打开游标EXEC SQL OPEN ORDER_CUR END-EXEC提取游标并更新行SET WF-END-CURSOR-N TO TRUE    PERFORM UNTIL WF-END-CURSOR-Y    EXEC SQL    FETCH ORDER_CUR INTO :ORDER-ID, :TRANSACTION-ID END-EXEC IF TRANSACTION-ID NOT = SPACES    EXEC SQL   ... 阅读更多

"FOR UPDATE OF"子句在游标中的目的是什么?如果我们在 COBOL-DB2 程序中不使用此子句就触发 UPDATE 语句会发生什么?

Mandalika
更新于 2020年9月15日 10:35:09

694 次查看

“FOR UPDATE OF”子句在游标声明中给出,当我们想要更新表时使用。所有需要更新的列都应在游标声明中给出。“FOR UPDATE OF”子句将在游标打开后对所有合格行放置独占锁。我们也可以在不使用“FOR UPDATE CLAUSE”的情况下更新表,但在这种情况下,只有在执行 UPDATE 查询时才会对该行放置独占锁。

您将如何在 COBOL-DB2 程序中检测游标行结束的条件?

Mandalika
更新于 2020年9月14日 15:28:00

1K+ 次查看

游标可用于从 DB2 表中提取多行。但是,我们必须在循环中提取此游标,以便一次将对应于单行的值分配给主机变量。根据此逻辑,我们必须处理我们的循环,直到游标到达最后一行结果。当游标中没有更多行要提取时,SQLCODE 字段的值为 100。实际上,我们可以如下实现。SET WF-END-CURSOR-N TO TRUE PERFORM UNTIL WF-END-CURSOR-Y    EXEC SQL       FETCH ORDER_CUR ... 阅读更多

在任何 COBOL-DB2 程序中使用游标涉及哪些步骤?

Mandalika
更新于 2020年9月14日 15:22:57

7K+ 次查看

当我们必须从表中提取多行时,使用游标。在 COBOL-DB2 程序中使用游标涉及 4 个步骤。声明游标- 在此步骤中,我们将定义游标的布局。我们将给出我们要使用的查询。例如:EXEC SQL DECLARE ORDER_CUR CURSOR FOR SELECT ORDER_ID FROM ORDERS WHERE ORDER_DATE = ‘2020-07-28’ END-EXEC打开游标- 接下来我们将打开我们的游标。此语句准备游标以进行数据检索。例如:EXEC SQL OPEN ORDER_CUR END-EXEC提取游标- 在此语句中,我们开始从 DB2 中提取数据,并且... 阅读更多

解释在什么情况下应使用游标而不是独立的 SELECT 语句?

Mandalika
更新于 2020年9月14日 15:13:40

61 次查看

当我们在 WHERE 子句中使用主键或备用键时,通常会使用独立的 SELECT 语句。因此,在这种情况下,我们确定独立的 SELECT 语句只会返回一行,因为主键不能具有重复值(多行)。如果我们想要使用非唯一键查询数据库,该键可能会从 DB2 表中返回多行,则必须使用游标来处理返回的多行。我们可以循环访问游标以逐行读取每个行数据。例如,如果我们想要... 阅读更多

广告