mysql procedure and cursor

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();

  

猜你喜欢

转载自www.cnblogs.com/kaishan1990/p/10191586.html