Я создал функцию 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