在两个表之间使用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 表,则需要一个单独的更新游标,如上所示。
广告