游標,存儲過程 無 DELIMITER $$USE `eloan_tj`$$DROP PROCEDURE IF EXISTS `pro_d_tender_updatecount`$$CREATE DEFINER=`dba`@`%` PROCEDURE `pro_d_tender_updatecount`(IN pownerid INT)BEGIN -- 借款成功次數 i=循環標識符 DECLARE cid,i INT; -- 成功借
游標,存儲過程 <無> $velocityCount-->DELIMITER $$ USE `eloan_tj`$$ DROP PROCEDURE IF EXISTS `pro_d_tender_updatecount`$$ CREATE DEFINER=`dba`@`%` PROCEDURE `pro_d_tender_updatecount`(IN pownerid INT) BEGIN -- 借款成功次數 i=循環標識符 DECLARE cid,i INT; -- 成功借款時間','號分割 2012-03-19,2012-03-19 DECLARE cdatestr TEXT; -- 兩次時間 DECLARE dateS,dateE VARCHAR(50); SET i = 1; -- 借款成功次數,借款成功時間 SELECT COUNT(DISTINCT FROM_UNIXTIME(cdate,'%Y-%m-%d')),GROUP_CONCAT(DISTINCT FROM_UNIXTIME(cdate,'%Y-%m-%d') ORDER BY cdate) INTO cid,cdatestr FROM d_tender_repayment WHERE borrowerid = pownerid; SELECT GROUP_CONCAT(DISTINCT FROM_UNIXTIME(cdate,'%Y-%m-%d') ORDER BY cdate) gcdate INTO cdatestr FROM d_tender_repayment WHERE borrowerid = pownerid; WHILE i <= cid DO SELECT SUBSTRING_INDEX(cdatestr,',',i-1) INTO dateS; -- 上次時間 SELECT SUBSTRING_INDEX(cdatestr,',',i) INTO dateE; -- 這次時間 SET dateS = UNIX_TIMESTAMP(SUBSTRING_INDEX(dateS,',',-1));-- 上次','最后時間 SET dateE = UNIX_TIMESTAMP(SUBSTRING_INDEX(dateE,',',-1));-- 這次','最后時間 IF i = 1 THEN UPDATE d_tender SET bidding = 0 WHERE cdate <= dateE AND ownerid = pownerid; ELSE UPDATE d_tender SET bidding = i-1 WHERE cdate >= dateS AND cdate <= dateE AND ownerid = pownerid; END IF; SET i= i +1; END WHILE; -- 大于最后時間 UPDATE d_tender SET bidding = cid WHERE cdate >= dateE AND ownerid = pownerid; -- 未借款成功 UPDATE d_tender SET bidding = 0 WHERE bidding IS NULL; END$$ DELIMITER ; CALL pro_d_tender(94) SELECT ownerid,bidding,FROM_UNIXTIME(cdate,'%Y-%m-%d') FROM d_tender WHERE ownerid = 94 -- 2012-05-17 -- 2013-06-25 -- 2013-09-04 -- 2013-12-11 SELECT DISTINCT FROM_UNIXTIME(cdate,'%Y-%m-%d') gcdate FROM d_tender_repayment WHERE borrowerid =94; SELECT ownerid,bidding,FROM_UNIXTIME(cdate,'%Y-%m-%d') FROM d_tender WHERE ownerid = 416 -- 2012-03-19 -- 2012-09-19 SELECT DISTINCT FROM_UNIXTIME(cdate,'%Y-%m-%d') gcdate FROM d_tender_repayment WHERE borrowerid =416; UPDATE d_tender SET bidding = NULL CALL pro_updatecount SELECT * FROM d_tender DROP PROCEDURE IF EXISTS pro_updatecount; DELIMITER $$ CREATE PROCEDURE pro_updatecount() BEGIN -- 聲明一個標志done, 用來判斷游標是否遍歷完成 DECLARE done INT DEFAULT 0; -- 聲明一個變量,用來存放從游標中提取的數據 -- 特別注意這里的名字不能與由游標中使用的列明相同,否則得到的數據都是NULL DECLARE pownerid VARCHAR(50) DEFAULT NULL; -- 聲明游標對應的 SQL 語句 DECLARE cur CURSOR FOR SELECT ownerid FROM d_tender GROUP BY ownerid; -- 在游標循環到最后會將 done 設置為 1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -- 執行查詢 OPEN cur; -- 遍歷游標每一行 REPEAT -- 把一行的信息存放在對應的變量中 FETCH cur INTO pownerid; IF NOT done THEN -- 這里就可以使用 pownerid對應的信息了 CALL pro_d_tender_updatecount(pownerid); END IF; UNTIL done END REPEAT; CLOSE cur; END $$ DELIMITER ;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com