问题:是否可以更新在2个表ORDERS和TRANSACTIONS上使用JOIN的CURSOR?为什么或者为什么不?我们如何进行这些表的更新?
每当我们在两个或多个表(在这种情况下为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表,则需要一个单独的更新游标,如上 。