852 次浏览
问题:如何使用联接从 ORDERS 和 TRANSACTIONS DB2 表中查找 ORDER_ID、TRANSACTION_ID 和 TRANSACTION_STATUS?解决方案我们可以使用 INNER JOIN 查询从 ORDERS 和 TRANSACTIONS 表中查找 ORDER_ID、TRANSACTION_ID 和 TRANSACTION_STATUS。例如,如果我们有两个 ORDERS 表如下。ORDER_IDTRANSACTION_IDORDER_DATEZ22345ITX448923-10-2020Z62998ITX431121-10-2020Z56902ITX312026-10-2020 TRANSACTION_IDTRANS_AMTTRANSACTION_STATUSITX44891128PAIDITX43112318PAIDITX312088956UNPAIDITX21675612FAILED我们可以使用如下 INNER JOIN 查询。示例SELECT ORDER_ID, TRANSACTION_ID, TRANSACTION_STATUS FROM ORDERS INNER JOIN TRANSACTIONS ON ORDERS.TRANSACTION_ID = TRANSACTIONS.TRANSACTION_ID上述查询将返回以下结果。ORDER_IDTRANSACTION_IDTRANSACTION_STATUSZ22345ITX4489PAIDZ62998ITX4311PAIDZ56902ITX3120UNPAID阅读更多
158 次浏览
我们可以使用子查询找到 ORDERS 表中所有 ORDER_TOTAL 大于所有 ORDER_TOTAL 平均值的 ORDER_ID。例如,如果我们有以下 ORDERS 表。ORDER_IDORDER_TOTALA223451867A629985634A569027615A5691187960A56915132A5691880363以下是查找所需数据的子查询。示例SELECT ORDER_ID, ORDER_TOTAL FROM ORDERS WHERE ORDER_TOTAL > (SELECT AVG(ORDER_TOTAL) FROM ORDERS)上述查询的结果如下。ORDER_IDORDER_TOTALA2234587960A6299880363
803 次浏览
问题:当放置在表空间上的锁的数量超过定义的限制时,COBOL-DB2 程序将如何运行?解决方案应用程序可以在 DB2 资源(如页面、表行等)上放置的锁的数量在 DSNZPARM 中定义。一旦任何表中的页面和行级锁的数量超过允许的限制,则会发生锁升级。在锁升级中,DB2 释放它持有的页面或行级锁,并尝试获取表空间级或更高级别的锁。在这种情况下,应用程序现在对 DB2 拥有更广泛的访问/范围... 阅读更多
256 次浏览
DB2 优化器在数据库的整体性能中起着重要作用。优化器通过该路径从数据库中获取数据,为每个查询选择最佳访问路径。它识别要遵循的索引、查询谓词等。优化器自动选择访问路径,我们可以使用 EXPLAIN DB2 命令轻松找到访问路径。我们必须首先设置查询编号,然后提供我们的 SQL 查询以通过三个简单的步骤找出其访问路径。例如,我们有一个 DB2 ORDERS 表,我们想检查具有... 阅读更多
1K+ 次浏览
问题:如何实现一个逻辑,以便为插入的每一行自动在 DB2 列中生成一个唯一值?解决方案我们可以在 DB2 表中实现一个逻辑,通过该逻辑我们可以拥有一个列,该列将为插入的每一行自动生成一个值。此列可以用作主键,因此对于 DB2 表的随机访问非常有用。此逻辑可以通过 ROW-ID 和 SEQUENCE 实现。DB2 表的任何一列都可以定义为 ROW-ID 类型,之后 DB2 将自动分配一个新的... 阅读更多
129 次浏览
问题:什么是 DB2 子查询,子查询有什么用?借助 ORDERS 表上的示例解释子查询。解决方案DB2 中的子查询是在查询中的查询,即嵌套查询。子查询先执行,然后执行其父查询。我们可以最多有 15 层子查询。例如,如果我们在 DB2 中有以下 ORDERS 表。ORDER_IDORDER_TOTALZ223451267Z629986734Z569028815Z5691178990Z56915432Z5691877453如果我们想从 ORDERS 表中提取所有 ORDER_TOTAL 大于整体平均值的订单,则可以使用以下子查询。示例SELECT ORDER_ID FROM ORDERS WHERE ORDER_TOTAL > (SELECT AVG(ORDER_TOTAL) FROM ORDERS)该... 阅读更多
427 次浏览
OUTER JOIN 的结果包括 WHERE 子句中匹配的行和不匹配的行。DB2 中的 OUTER JOIN 主要有两个限制。OUTER JOIN 的 WHERE 子句只能包含“=”关系运算符。在两个或多个表的 OUTER JOIN 的情况下,不允许使用等。此外,WHERE 子句中的两个或多个条件只能与 AND 逻辑运算符一起使用,其他逻辑运算符(如 OR、NOT)不允许使用。处理 NULL 运算符的函数(如 VALUE 和 COALESCE)不能与 OUTER JOIN 一起使用。例如,如果我们有两个... 阅读更多
589 次浏览
DB2 有一个 DCL 概念,通过它我们可以控制对 DB2 对象(如表、计划等)的访问。DCL 代表数据控制语言,使用它我们可以向 DB2 对象提供和撤销用户访问权限。GRANT 命令将向用户授予对所提及对象的访问权限,而 REVOKE 命令将撤销用户的访问权限。例如,如果我们必须向用户 REL123X 提供 ORDERS 表上的 SELECT 和 UPDATE 访问权限,则我们将执行以下命令。GRANT SELECT, UPDATE ON ORDERS TO REL123X如果我们想提供 INSERT 访问权限,则我们将使用以下命令。GRANT ... 阅读更多
211 次浏览
当任何应用程序使用该资源时,DB2 会对表、表空间等资源进行锁定。在 COBOL-DB2 程序中,如果我们正在修改或删除表中的数据,则 DB2 会放置锁。当我们给出 ROLLBACK 语句以恢复对数据库所做的更改时,DB2 持有的所有锁都会默认释放。如果我们希望即使在回滚后也保持对资源的锁定,则必须使用 ON ROLLBACK RETAIN LOCKS 而不是 ROLLBACK。例如,考虑一个用 FOR UPDATE OF 子句声明的光标 ORDER_CUR。因此,一旦... 阅读更多
2K+ 次浏览
问题:如何在 DB2 中使用 SAVEPOINT?SAVE-POINT 在 DB2 中的目的是什么?借助示例说明。解决方案SAVEPOINT 用作标记或标签,以在不提交的情况下保存数据库中的更改。在对数据库进行更改后,我们可以给出命名 SAVEPOINT 语句,然后在任何时候都可以使用 ROLLBACK 语句将更改回滚到此保存点。实际上,我们可以在 COBOL-DB2 程序中有多个 SAVEPOINT,并且可以使用 ROLLBACK 跳回这些 SAVEPOINT 中的任何一个。这将恢复所做的所有更改... 阅读更多