在兩個表之間使用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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告