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 也无法更新它。SENSITIVE SCROLLABLE CURSOR 与 INSENSITIVE 不同,它对结果表中所做的更改敏感。其他应用程序所做的更改将反映在结果表中。我们可以像下面这样声明 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 ... 阅读更多