Mysql函数执行缓慢(有时无法正常工作)

时间:2018-09-26 09:59:27

标签: mysql function stored-procedures

我创建了一个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

0 个答案:

没有答案