PAYMENT 事務有兩版本,此處討論僅提供姓氏的版本。步驟包括:檢索地區名址、按姓氏找客戶 ID(同姓取中間客戶)、檢索客戶信息、更新地區/倉庫/客戶收入、記錄歷史。核心邏輯封裝於表函數 PAY_C_LAST() 中。
WITH RR USE AND KEEP UPDATE LOCKS 直接獲取更新鎖,配合 INHERIT ISOLATION LEVEL WITH LOCK REQUEST 保證語義純粹。ROW_NUMBER() OVER (ORDER BY C_FIRST) 給同姓客戶編號,配合 COUNT(*) OVER() 獲取總數,單次掃描避免雙重索引掃描,適合行數較少情況。同樣將非訂購項步驟封裝於表函數 ORD_C_LAST,使用 OLAP 找中間客戶。關鍵技巧:
ORDER BY ... FETCH FIRST 1 ROW ONLY 高效取極值行。三表連接(ORDER_LINE、STOCK、DISTRICT),唯一可用 CURSOR STABILITY 隔離級別的查詢,展示 DB2 逐查詢指定隔離級別能力。
MODIFIES SQL DATA 允許在關聯內表執行 INSERT/UPDATE/DELETE/MERGE。ORDER BY + FETCH FIRST 高效取極值行及非聚合列。