825 次浏览
JOIN 和 UNION 都用于组合来自一个或多个表的数据。在 JOIN 的情况下,附加数据出现在列中,而在 UNION 的情况下,附加数据出现在行中。例如,JOIN 假设我们有两个 DB2 表,ORDERS 和 TRANSACTIONS。我们必须为每个 ORDER_ID 提取 TRANSACTION_ID,然后我们将使用 INNER JOIN,如下所示:示例 SELECT ORDER_ID, TRANSACTION_ID FROM ORDERS INNER JOIN TRANSACTIONS ON ORDERS.TRANSACTION_ID = TRANSACTIONS.TRANSACTION_ID 此查询将产生 2 列。一列来自 ORDERS 表,即 ORDER_ID,另一列来自 TRANSACTIONS 表,即 TRANSACTION_ID。UNION 我们有…… 阅读更多
3K+ 次浏览
DB2 中 VALUE 函数的目的是检查 NULL 值,它可以代替 NULL 指示符或 COALESCE 函数。如果列值包含 NULL 值,则 VALUE 函数会用给定的参数替换列值。例如,如果我们有一个 ORDER 表,并且我们必须从此表中提取 ORDER_ID 和 ORDER_DESCRIPTION。ORDER_DECRIPTION 列可能包含 NULL 值。如果是这种情况,我们必须用空格替换 ORDER_DESCRIPTION,那么我们可以使用以下查询:示例 EXEC SQL SELECT ORDER_ID, VALUE(ORDER_DESCRIPTION, ‘ ‘) INTO :ORDER-ID, :ORDER-DESCRIPTION FROM ORDERS ... 阅读更多
168 次浏览
我们可以使用 SCROLLABLE CURSOR 将游标直接指向提到的相对位置。相对位置是从当前行到结果表中行的位置。例如,考虑下表。ORDER_IDORDER_DATEA223672020-07-28A667562020-07-28A778902020-07-29A968322020-07-29如果游标当前指向第 2 行,即 ORDER_ID A66756,则相对位置 +2 将为 ORDER_ID A96832,相对位置 -1 将为 ORDER_ID A22367。在 FETCH 语句中使用相对位置的语法为:EXEC SQL FETCH RELATIVE +2 ORDER_CURR INTO :ORDER-ID, :ORDER-DATE END-SQL阅读更多
317 次浏览
SCROLLABLE CURSOR 可用于将游标位置直接指向提到的绝对位置。绝对位置是从第一行到结果表中特定行的位置。我们可以使用 FETCH 语句中的 ABSOLUTE 参数来获取绝对位置。例如,我们必须声明一个可滚动游标,如下所示。EXEC SQL DECLARE ORDER_CURR SCROLL CURSOR FOR SELECT ORDER_ID, ORDER_DATE FROM ORDERS WHERE ORDER_DATE = ‘2020-07-29’ END-SQL现在,如果我们想要获取绝对的第 9 行,那么我们将…… 阅读更多
1K+ 次浏览
INSENSITIVE SCROLLABLE CURSOR 是一种只读游标,一旦打开,结果表就不能更改。其他应用程序一旦打开 INSENSITIVE SCROLLABLE CURSOR 也不能更新它。与 INSENSITIVE 不同,SENSITIVE SCROLLABLE CURSOR 对结果表中所做的更改很敏感。其他应用程序所做的更改将反映在结果表中。我们可以像下面这样声明 SENSITIVE 和 INSENSITIVE SCROLLABLE CURSOR。EXEC SQL DECLARE ORDER_CURR SENSITIVE SCROLL CURSOR FOR SELECT ORDER_ID, ORDER_DATE FROM ORDERS WHERE ORDER_DATE ... 阅读更多
513 次浏览
SCROLLABLE CURSOR 可以向前和向后移动。换句话说,它可以获取下一行以及前一行。SCROLLABLE CURSOR 使用 DECLARE CURSOR 中的“SCROLL”子句声明。例如,如果我们想在 ORDERS 表上声明一个 SCROLLABLE CURSOR,那么我们必须像下面这样声明游标。EXEC SQL DECLARE ORDER_CURR SCROLL CURSOR FOR SELECT ORDER_ID, ORDER_DATE FROM ORDERS WHERE ORDER_DATE = ‘2020-07-29’ END-SQL
444 次浏览
游标只能向前移动,这意味着它可以在每次提取后提取下一行。使用游标无法提取前一行。例如,如果我们的结果游标包含以下行:ORDER_IDORDER_DATEA223672020-07-28A667562020-07-28A778902020-07-29A968322020-07-29如果我们的游标当前指向第 3 行,即订单 ID A77890,则下一个提取将使游标指向下一行,即订单 ID A96832。无法将游标指向之前的订单 ID,即 A66756。为了实现这一点,我们使用 SCROLLABLE CURSOR 的概念。SCROLLABLE CURSOR 可以同时…… 阅读更多
743 次浏览
ATOMIC 和 NON ATOMIC 子句用于多行插入。如果未给出任何选项,则始终默认处理 ATOMIC。ATOMIC 子句规定,如果在多行插入期间插入任何一行时发生故障,则整个查询将失败,并且所有插入都将回滚。NON ATOMIC 子句与 ATOMIC 子句正好相反。当我们必须在多行插入中单独插入和处理所有行时,可以使用它。例如,此选项可以如下使用。MOVE 50 TO MAX-ROWS ... 阅读更多
622 次浏览
如果我们想使用单个 INSERT 命令在 DB2 表中插入多行,那么我们必须定义主机变量数组并将要插入的行数据移动到该数组中。我们需要在工作存储区部分定义另一个变量,其配置为 S9(4) COMP,它将保存要插入的行数。我们可以如下插入多行:MOVE 50 TO MAX-ROWS EXEC SQL INSERT INTO ORDERS (ORDER_ID, ORDER_DATE) VALUES(:ORDER-ID, :ORDER-DATE) FOR :MAX-ROWS ROWS END-EXECORDER-ID 和 ORDER-DATE 是主机变量,应该…… 阅读更多
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 ... 阅读更多