FIX: Выкорчевать пни / Unroot stumps

Moderator: Telakh


Leash
 
Posts: 8
Joined: 15 Nov 2014, 21:45

FIX: Выкорчевать пни / Unroot stumps

Post by Leash » 08 Dec 2014, 19:02

Ввиду огромного количества новичков с желанием побыть лесорубами со всеми вытекающими (вред экологии и окружающим) решил написать скрипт, выкорчевывающий пни.

Если хотите попробовать и проследить влияние на сервер - выкладываю исходный SQL.

Не забудьте сделать бекап базы!


Leash
 
Posts: 8
Joined: 15 Nov 2014, 21:45

Re: FIX: Выкорчевать пни / Unroot stumps

Post by Leash » 09 Dec 2014, 22:34

Code: Select all
DELIMITER //

DROP PROCEDURE IF EXISTS `p_deleteTrunk`//

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_deleteTrunk`()
   LANGUAGE SQL
   DETERMINISTIC
   MODIFIES SQL DATA
   SQL SECURITY DEFINER
   COMMENT 'Experimental procedure to remove tree trunks'
BEGIN
   DECLARE done BOOLEAN DEFAULT FALSE;
   DECLARE cTerID, cVersion, cGeoID INT UNSIGNED;
   DECLARE cForest CURSOR FOR
      SELECT filtered.`TerID`, MAX(filtered.`Version`) AS `Version`, filtered.`GeoDataID`
      FROM `forest_patch` AS filtered
      INNER JOIN(
         SELECT `TerID`, MAX(`Version`) AS `Version`, `GeoDataID`
         FROM `forest_patch`
         WHERE `Action` !=4
         GROUP BY `GeoDataID`
      ) AS actual
      ON actual.`GeoDataID` = filtered.`GeoDataID` AND actual.`Version` < filtered.`Version`
      WHERE filtered.`Action` =4
      GROUP BY filtered.`GeoDataID`;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
   
   OPEN cForest;
   
   trunk_loop: LOOP
      FETCH cForest INTO cTerID, cVersion, cGeoID;
      IF done THEN
         LEAVE trunk_loop;
      END IF;
      SELECT f_addForestPatch(cTerID,3,cGeoID,NULL,NULL,NULL,NULL);
      CALL p_deleteForestItem(cGeoID);
   END LOOP;
   
   CLOSE cForest;
   
END//

CALL p_deleteTrunk()//

Return to Обсуждения на русском языке

cron