在兩個表之間使用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 表,則需要一個單獨的更新遊標,如上所示。
廣告