views:

19

answers:

0

i got this sp:

DROP  TABLE IF EXISTS SplitValuesDump;
      CREATE  TABLE SplitValuesDump (
        value VARCHAR(1000) NOT NULL PRIMARY KEY
        );
DELIMITER $$
DROP PROCEDURE IF EXISTS `ChangeSitesRedirects`$$
CREATE  PROCEDURE `ChangeSitesRedirects`(
    prodimainAddress varchar(255),
    subdomainMainAddress varchar(255)
)
    SQL SECURITY INVOKER
        BEGIN
    DECLARE tdomain varchar(1000);
    DECLARE tvalue varchar(1000);
    DECLARE prepValue varchar(1000);
    DECLARE subdomainFullAddress varchar(1000);
    DECLARE totalDomain int;
    DECLARE tclientid int;
    DECLARE sitedone INT DEFAULT 0;
    DECLARE splitdone INT DEFAULT 0;
    DECLARE lastDomain varchar(1000);
    DECLARE curlSites CURSOR FOR (SELECT domain,clientid from sites where redirectsubdomain = 'N');
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET sitedone = 1;
    set sitedone := 0;
    OPEN curlSites;
    Scan_Sites:WHILE (sitedone = 0) DO
    IF sitedone = 1 THEN
      BEGIN
        LEAVE Scan_Sites;
      END;
    ELSE
      BEGIN
        DECLARE curlStringDump CURSOR FOR (SELECT `value` from SplitValuesDump);
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET splitdone = 1;
        FETCH curlSites INTO tdomain,tclientid;
        CALL split_string(tdomain,';');
        OPEN curlStringDump;
        SET splitdone:=0;
        ScanDump: WHILE (splitdone = 0) DO
        IF splitdone = 1 THEN
          BEGIN
            LEAVE ScanDump;
          END;
        ELSE
          BEGIN
            FETCH curlStringDump INTO tvalue;
            SET subdomainFullAddress:= subdomainMainAddress;
            IF tvalue <> "" THEN
            BEGIN
                IF tvalue like prodimainAddress OR tvalue like subdomainMainAddress THEN 
                BEGIN
                    set totalDomain := totalDomain + 1;
                    IF tvalue like subdomainMainAddress THEN
                    BEGIN
                        SET subdomainFullAddress := tvalue;
                    END;
                    END IF;

                END;
                ELSE
                BEGIN
                    set totalDomain := totalDomain + 1;
                    set lastDomain := tvalue;
                END;
                END IF;
            END;
            END IF;
          END;
        END IF;
        END WHILE ScanDump;
        CLOSE curlStringDump; 
        SET splitdone :=0;
        SET prepValue:='N';
        IF lastDomain = '' AND totalDomain = 2 THEN
        BEGIN
            set prepValue := subdomainFullAddress || CHAR(2) || prodimainAddress;
            INSERT INTO sites_tmp SELECT * FROM sites where clientid = tclientid limit 1;
            UPDATE sites_tmp SET redirectsubdomain = prepValue WHERE clientid = tclientid limit 1; 
        END;
        ELSE
        BEGIN
            set prepValue := prodimainAddress || CHAR(2) || lastDomain || CHAR(1) ||subdomainFullAddress || CHAR(2) || lastDomain;
            INSERT INTO sites_tmp SELECT * FROM sites where clientid = tclientid limit 1;
            UPDATE sites_tmp SET redirectsubdomain = prepValue WHERE clientid = tclientid limit 1; 
        END;
        END IF;
      END;
    END IF;
    END WHILE Scan_Sites;
    CLOSE curlSites; 
    SET sitedone :=0;
END$$

i try in the get few info from column data split his data and bring some data ion there. for each recored on table sites and then update table sites_tmp.

i got issue that i not know how i can debug at or make at faster? what ur recommend here? as well why its so slow??? and in the end its not passed the all the records?