【问题标题】:MySQL: Column is empty in an insert logMySQL:插入日志中的列为空
【发布时间】:2019-09-15 12:18:11
【问题描述】:

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

日志栏是空的...怎么了?

【问题讨论】:

  • 尝试重命名本地变量,使其与字段名称不匹配。

标签: mysql sql stored-procedures


【解决方案1】:

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

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 ;

【讨论】:

  • 没错,我在变量中设置了 v_,现在它正在工作,谢谢
  • @大卫。 . .您也可以使用限定的列名 (c.company) 来修复它。最佳实践是有原因的——限定列名并将参数与列名区分开来。
猜你喜欢
  • 2017-03-13
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多