drop PROCEDURE p_cffex_expire; CREATE PROCEDURE `p_cffex_expire`() lablel:BEGIN declare today varchar(20); declare calendar_day varchar(20); declare delivery varchar(20); declare instrumentid varchar(20); declare productclass char; declare exchangeid varchar(20); DECLARE no_more_record INT DEFAULT 0; DECLARE cur_record CURSOR FOR SELECT CONCAT(deliveryyear,LPAD(deliverymonth,2,0),'00') as delivery,a.instrumentid,a.productclass,a.exchangeid FROM t_instrument a WHERE a.exchangeid='CFFEX' AND a.expiredate>CURDATE() AND a.deliverymode='2'; /*首先这里对游标进行定义*/ DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1; /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/ CREATE TEMPORARY TABLE if not exists tmp_cffex_expire ( instrumentid varchar(20), productclass char, exchangeid varchar(20) ); TRUNCATE tmp_cffex_expire; SELECT DATE_FORMAT(NOW(),'%Y%m%d') into today; OPEN cur_record; /*接着使用OPEN打开游标*/ FETCH cur_record INTO delivery,instrumentid,productclass,exchangeid; /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/ WHILE no_more_record != 1 DO SELECT day into calendar_day FROM t_calendar WHERE day<delivery AND tra=1 ORDER BY day DESC LIMIT 1; if today >= calendar_day then INSERT INTO tmp_cffex_expire(instrumentid,productclass,exchangeid) VALUES (instrumentid,productclass,exchangeid); end if; FETCH cur_record INTO delivery,instrumentid,productclass,exchangeid; END WHILE; CLOSE cur_record; /*用完后记得用CLOSE把资源释放掉*/ SELECT * from tmp_cffex_expire; END; call p_cffex_expire();