我已经编写了以下存储过程,它在 HeidiSQL中以SET pay_ref = SELECT CONCAT('KOS' ...
让我首先解释一下这个过程是怎么回事。我有一个gamers
带有自动增量的 BIGINT 主键的表。这个过程应该:
- 从用户那里获取一些参数
- 根据他/她的电子邮件地址检查用户是否已经存在于数据库中,如果reord确实存在,则返回单词“DUPLICATE”
- 否则它会正常插入
- 然后它读取创建的新记录的 ID 并将其转换为 varchar,用前导零填充它,然后与其他一些字符串连接
- 这个新字符串(例如应该读取
KOS00001ABCDEF
)然后被更新到pay_refcode
字段 >>> 这就是我们决定为用户生成唯一支付参考的方式 - 如果一切顺利,它将
retval
使用新生成的参考代码进行更新,以便由 PHP 脚本读取。
DELIMITER //
CREATE PROCEDURE `InsertGamer` (
IN p_fname VARCHAR(30),
IN p_lname VARCHAR(30),
IN p_email VARCHAR(255),
IN p_favgame VARCHAR(60),
IN p_pay_suffix VARCHAR(6),
OUT retval VARCHAR(14)
)
BEGIN
DECLARE last_id BIGINT;
DECLARE pay_ref VARCHAR(14);
IF (EXISTS(SELECT * FROM gamers WHERE (email = p_email))) THEN
SET retval = 'DUPLICATE';
ELSE
INSERT INTO gamers (fname, lname, email, favgame, pay_refcode)
VALUES (p_fname, p_lname, p_email, p_favgame, NULL);
SET last_id = LAST_INSERT_ID();
SET pay_ref = SELECT CONCAT('KOS', (SELECT LPAD(CONVERT(last_id, VARCHAR(5)),5,'0')), p_pay_suffix);
UPDATE gamers
SET pay_refcode = pay_ref
WHERE application_id = last_id;
SET retval = pay_ref;
END IF;
END //
我一生都无法弄清楚问题所在,并真诚地感谢您的帮助。非常感谢您!