| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | CREATE DEFINER=`root`@`%` PROCEDURE `updatedownloadprojname`(  pastureidIN BIGINT (20),  dateIN VARCHAR(50))label:BEGIN  DECLARE positionIdS  INT (20); DECLARE positionNameS VARCHAR (100);  DECLARE i,amount,sorts,amountsl,sortssl,havebuttons,havebuttond1 INT(11) DEFAULT 0;  DECLARE msg1 TEXT;   DECLARE code1 CHAR(5) DEFAULT '00000';   DECLARE ids,projnames,temstr,tem,pids,idssl varCHAR(30);   DECLARE t_error INTEGER DEFAULT 0;  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  BEGIN      -- 获取异常code,异常信息      GET DIAGNOSTICS CONDITION 1      code1 = RETURNED_SQLSTATE, msg1 = MESSAGE_TEXT;   END;  #开启事务   START TRANSACTION;	 	 	 select 1 into tem;	SELECT '' INTO temstr;	SELECT 0 INTO sorts;	 SELECT count(*) into amount  FROM downloadedplan	WHERE mydate = dateIN AND pastureid = pastureidIN   ;		 WHILE amount > 0 DO	 	  SELECT amount-1 INTO amount;			         SELECT id,projname,pid,havebuttons INTO ids,projnames,pids,havebuttons FROM downloadedplan	 WHERE mydate = dateIN AND pastureid = pastureidIN 	 ORDER BY projname,id ASC LIMIT sorts,1;	 	 	 	 IF(length(projnames) = 6) and havebuttons = 0	 THEN	 SELECT '1' INTO tem;	 SELECT LEFT(projnames,2) INTO temstr;	 	 	 WHILE (SELECT COUNT(*) FROM downloadedplan  WHERE pastureid=pastureidIN and mydate = dateIN AND projname = CONCAT(LEFT(temstr,2),LPAD(tem,3,'0')))>0 do	  SELECT tem+1 INTO tem;	 end WHILE;	 	 	 UPDATE downloadedplan	 SET projname = CONCAT(LEFT(projname,2),LPAD(tem,3,'0'))	 WHERE pastureid=pastureidIN AND id = ids;	  END IF;						select count(1) into amountsl FROM  downloadedplan  WHERE pastureid=pastureidIN and mydate = dateIN AND length(projname) > 6  and pid = pids;-- -- 					SELECT 0 INTO sortssl;			 select projname into projnames from downloadedplan where id = ids;						 			if  length(projnames) < 6 THEN-- 			 select projnames;		 WHILE amountsl > 0 DO		  SELECT 0 INTO havebuttond1;-- 		 			select id,havebutton into idssl,havebuttond1 FROM downloadedplan WHERE pastureid=pastureidIN and mydate = dateIN AND length(projname) > 6  and pid = pids  ORDER BY projname,id ASC LIMIT sortssl,1;-- 		 		 SELECT sortssl + 1 INTO sortssl;		 if havebuttond1 = 0 THEN						UPDATE downloadedplan						SET projname = CONCAT(projnames,'.', sortssl)						WHERE pastureid=pastureidIN AND id = idssl;		  END IF; 		 		 SELECT amountsl-1 INTO amountsl;		END WHILE;		END IF; 		 		SELECT sorts + 1 INTO sorts;	  END WHILE;		 	 	 	 	 	 	 	 	 SELECT 0 INTO sorts;	 SELECT 0 INTO amount;	   	SELECT count(*) into amount  FROM downloadedplan	WHERE mydate = dateIN AND pastureid = pastureidIN  ;		WHILE amount > 0 DO	        SELECT id INTO ids FROM downloadedplan	 WHERE mydate = dateIN AND pastureid = pastureidIN  	 ORDER BY projname asc limit sorts,1;		 SELECT sorts+1 INTO sorts;	 		 UPDATE downloadedplan	 SET sort = sorts	 WHERE pastureid=pastureidIN AND id = ids;         SELECT amount-1 INTO amount;	 END WHILE;	-- 	SELECT count(*) into amount  FROM downloadedplan-- 	WHERE mydate = dateIN AND pastureid = pastureidIN and length(projname)>5-- 	 ORDER BY projname,id asc;-- 	-- -- 	update downloadedplan  -- 	set sort = 200 + sort-- 	WHERE pastureid=pastureidIN AND mydate = dateIN and LENGTH(projname)>5;-- 	--   WHILE amount > 0 DO--      SELECT amount-1 INTO amount;--     --         SELECT id,projname INTO ids,projnames FROM downloadedplan-- 	 WHERE mydate = dateIN AND pastureid = pastureidIN AND LENGTH(projname)>5-- 	 ORDER BY projname,id ASC LIMIT 1;-- 	 -- 	 -- 	 -- 	 IF(temstr<>LEFT(projnames,2))-- 	 THEN-- 		SELECT '1' INTO tem;-- 		SELECT LEFT(projnames,2) INTO temstr;-- 	 END IF;-- 	 -- 	 WHILE (SELECT COUNT(*) FROM downloadedplan  WHERE pastureid=pastureidIN and mydate = dateIN AND projname = CONCAT(LEFT(temstr,2),LPAD(tem,3,'0')))>0 do-- 	  SELECT tem+1 INTO tem;-- 	 end WHILE;-- -- 	 WHILE (SELECT COUNT(*) FROM downloadedplan  WHERE pastureid=pastureidIN AND mydate = dateIN AND sort = sorts)>0 DO-- 	  SELECT sorts+1 INTO sorts;-- 	 END WHILE;-- 	 -- 	 UPDATE downloadedplan-- 	 SET projname = CONCAT(LEFT(projname,2),LPAD(tem,3,'0')),-- 	 sort = sorts-- 	 WHERE pastureid=pastureidIN AND id = ids;-- -- 	 SELECT tem+1 INTO tem;-- 	 SELECT sorts+1 INTO sorts;-- 	   --   END WHILE;		          IF code1 = '00000' THEN    COMMIT;   SELECT    'success' msg;  ELSE     ROLLBACK;   SELECT    msg1 msg;  END IF;  END
 |