-- 游標
DECLARE cur CURSOR FOR SELECT v.COST_TOTALFRGHT ,v.ACC_ID -- FORMAT(v.COST_TOTALFRGHT/10000,2)
FROM mdm_ct_customer c LEFT JOIN v_mdm_customer_invoice_account v ON v.ACC_ID = c.ACC_ID
WHERE c.CUSTOMER_TYPE = 'customer_type_vipkh';-- <> 'customer_type_yskh';
-- 將結束標志系結到游標
DECLARE CONTINUE HANDLER FOR NOT found SET done=1;
-- 打開游標
OPEN cur;
-- 回圈
read_loop: LOOP
-- 提取游標里的資料
FETCH cur INTO totalFrght,accId;
-- 宣告宣告時候結束
IF done = 1 THEN
LEAVE read_loop;
END IF;
-- 根據客戶當月發貨總金額計算客戶等級
SELECT m.CUSTOME_LEVEL__NREC_ID,m.LEVEL_NAME INTO level_id,level_name FROM mdm_ct_customer_level_nrec m
WHERE m.MIN_LEVEL <= totalFrght and m.MAX_LEVEL > totalFrght;
-- 如果有客戶等級,再修改
IF level_id IS NOT NULL THEN
-- 根據accid 修改對應客戶的等級和名稱
UPDATE mdm_ct_customer c SET c.CUSTOMER_LEVEL_TYPE = level_name,c.CUSTOME_LEVEL__NREC_ID =level_id
WHERE c.ACC_ID = accId;
END IF;
-- 結束回圈
END LOOP;
-- 關閉游標
CLOSE cur;
END
上邊的 level_id,level_name 查出來有可能 是空,我想判斷下,如果是空,就不修改下邊的,但是這句不起作用,IF level_id IS NOT NULL THEN,現在如果 level_id 是空的話,直接就跳出回圈了。。求大神指教。。。
樓主這個解決方法給了我很大啟發,解決了大麻煩,感謝樓主.
分析下樓主之前的問題,當select XX into XXX from tablename查詢結果為null時,DECLARE CONTINUE HANDLER FOR NOT found SET done=1;會生效,終止回圈,所以改成done>done1時,問題自然就解決了.
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......