Медленное выполнение функции Mysql (иногда не работает) - PullRequest
0 голосов
/ 26 сентября 2018

Я создал функцию MySQL и SP.Я вызываю функцию из sp, но иногда функция не выполняется.Иногда работает.Я не могу понять, почему это происходит.Пожалуйста, помогите решить эту странную проблему.

CREATE DEFINER=`root`@`localhost` PROCEDURE `createAccountNumber`(IN origin_type_id INT,IN membership_type_id INT)
BEGIN
DECLARE random_number,account_number Varchar(19) DEFAULT NULL;

SELECT FLOOR(RAND() * 9999999) AS random_num INTO random_number
WHERE "number" NOT IN (SELECT number FROM random_numbers)
LIMIT 1;

INSERT INTO random_numbers VALUES(random_number);
 
 SET @acc = CONCAT('100000',(select cast(origin_type_id as nchar)), (select cast(membership_type_id as nchar)), (select cast(random_number as nchar)));
 SET @x= luhn_sum(@acc);

SET account_number = CONCAT(@acc,@x);
SELECT account_number;
END

Это моя функция

CREATE DEFINER=`root`@`localhost` FUNCTION `luhn_sum`(p_number VARCHAR(32)) RETURNS int(11)
    SQL SECURITY INVOKER
BEGIN
    DECLARE i, mysum, r, weight,check_digit,k,p,w,z INT;
    DECLARE abc varchar(4);

    SET weight = 2;
    SET mysum = 0;
    SET i = 1;
    SET k = length(p_number);

    WHILE i <= k DO
        SET r = substring(p_number, i, 1) * weight;
        if r>9 then 
        SET p=substring(r, 1, 1) +substring(r, 2, 1);
        end if;
        SET mysum = mysum + IF(r > 9, p, r);
        SET i = i + 1;
        if i%2=0 then
        SET weight = 1;
        else
        SET weight = 2;
        end if;
    END WHILE;
	
    SELECT CAST((mysum*9) as nchar(4)) into abc;
    SELECT RIGHT(abc, 1) into check_digit;
  	 
    RETURN check_digit;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...