我在 mysql 中有这个存储过程:
DELIMITER $$
CREATE PROCEDURE createCompany ()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE company varchar(5000) DEFAULT "";
DEClARE cur CURSOR FOR SELECT company FROM companies;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1
OPEN cur;
getCompany: LOOP
FETCH cur INTO company;
IF finished = 1 THEN
LEAVE getCompany;
END IF;
call LOG(company);
END LOOP getCompany;
CLOSE cur;
END$$
DELIMITER ;
LOG程序是:
DELIMITER $$
CREATE PROCEDURE `LOG`(IN message varchar(5000))
BEGIN
insert into tmplog (log) values (message);
END$$
DELIMITER ;
我有一个名为 tmplog 的临时表,其中包含两个字段:日期和日志 (varchar(5000))
当我调用 createCompany 时,我得到下一个结果:
日志列是空的...出了什么问题?
最佳答案
拥有与列同名的变量是非常危险的。试试这个:
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_company varchar(5000) DEFAULT "";
DEClARE cur CURSOR FOR SELECT c.company FROM companies c;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1
OPEN cur;
getCompany: LOOP
FETCH cur INTO v_company;
IF v_finished = 1 THEN
LEAVE getCompany;
END IF;
call LOG(v_company);
END LOOP getCompany;
CLOSE cur;
END$$
DELIMITER ;
关于MySQL:插入日志中的列为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57944034/