PAYMENT 交易第二版本處理「僅知姓氏」場景:需在該區內同姓客戶中按名字排序取「中間」客戶。核心邏輯封裝於表函數 PAY_C_LAST()。
INHERIT ISOLATION LEVEL WITH LOCK REQUEST,語義純淨且可擴展。ROW_NUMBER() + COUNT(*) OVER():單掃描同時獲得行號與總數,以 NUM = (COUNT+1)/2 定位中間客戶。權衡:少量內存緩衝換取避免雙索引掃描,對「同姓行數少、行寬窄」場景極優。OLD TABLE / NEW TABLE 配合 UPDATE ... SET ... = (SELECT ... FROM OLD/NEW TABLE(...)):單語句完成「更新並返回舊/新值」,消除獨立查詢開銷。表函數 ORD_C_LAST() 同樣用 OLAP 定位中間客戶,隨後:
SELECT O_ID, O_CARRIER_ID, O_ENTRY_D
FROM ORDERS
WHERE O_W_ID=? AND O_D_ID=? AND O_C_ID=?
ORDER BY O_ID DESC
FETCH FIRST 1 ROW ONLY
利用 (O_W_ID, O_D_ID, O_C_ID, O_ID) 索引降序特性,單次索引掃描即得最大 O_ID 及攜帶列,避免 MAX() 聚合 + 回表。訂單明細另以游標單獨抓取,避免笛卡兒積重複傳輸客戶/訂單信息。
唯一允許 WITH CS(Cursor Stability)運行的查詢。三表連接 ORDER_LINE - STOCK - DISTRICT,條件 OL_O_ID BETWEEN d_next_o_id-20 AND d_next_o_id 限定最近 20 筆訂單,統計低庫存產品數。展示 DB2 指定語句級隔離級別能力。
FROM OLD/NEW TABLE (UPDATE ...) 獲取生成列/被刪行DELETE FROM (SELECT ... ORDER BY ... FETCH FIRST n) 實現 POP 隊列語義DB2 將「DML 返回結果集」原生融入 SQL 語法,無需臨時表與過程語言,極大提升表達力與性能。