在两个表之间使用JOIN的游标上,更新操作是什么?


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

解决方案

当我们在两个或多个表(在本例中为 ORDERS 和 TRANSACTIONS)上使用 JOIN 在游标中时,会在虚拟内存中生成一个临时表。但是,由于这是一个临时表,我们可以从该表中提取数据,但无法更新该表。

如果我们想更新 JOIN 中使用的任何表,则必须为所有表声明一个单独的游标,并且必须构建单独的逻辑来更新每个 DB2 表。例如,如果我们想创建一个 UPDATE 游标来更新 ORDERS 表,那么我们将声明如下所示的游标。

示例

EXEC SQL
DECLARE ORDER_CUR CURSOR WITH HOLD FOR
   SELECT * FROM ORDERS
      FOR UPDATE OF ORDER_TOTAL, ORDER_STATUS
END-EXEC

但是,如果我们希望更新此表的所有列,则不应在“FOR UPDATE” OF 子句中指定任何列名。同样,如果我们想更新 TRANSACTIONS 表,则需要一个单独的更新游标,如上所示。

更新于: 2020-12-01

661 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告