MySQL:插入日志中的列为空

标签 mysql sql stored-procedures

我在 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 时,我得到下一个结果:

enter image description here

日志列是空的...出了什么问题?

最佳答案

拥有与列同名的变量是非常危险的。试试这个:

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/

相关文章:

sql 查找和替换

具有多个 ORDER BY 子句和 IF 条件的 Mysql 查询

oracle - PLS-00103 : Encountered the symbol “)” when expecting one of the following:

sql-server-2005 - 您认为该存储过程模板有任何问题吗?

php - Laravel:具有共享表的多对多

mysql - 事件记录: Getting a User's Username with a user Id

mysql - 使用 MySQL 中的子查询减去一周前的数据

sql - 如何汇总按列和日期分组的数据,并考虑丢失数据的日期

mysql - 为什么我的 JOIN 会增加/可能会增加查询中的 SUM?

c# - 使用 SQL DataReader 捕获插入或删除的值