Mysql Trigger null结果

时间:2015-10-23 10:52:58

标签: mysql triggers null

SET SQL_SAFE_UPDATES = 0;
use my_database;
DELIMITER $$
DROP PROCEDURE IF EXISTS Comit $$
CREATE PROCEDURE Comit ()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE ids INT;
    DECLARE leftChilds INT;
    DECLARE cur CURSOR FOR SELECT id FROM user;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
        ins_loop: LOOP
            FETCH cur INTO ids;
            IF done THEN
                LEAVE ins_loop;
            END IF;
            SET leftChilds = ( SELECT turnoverBalance FROM user WHERE proposer = ids AND side = 'left' LIMIT 1 );
            INSERT INTO log(`log`) VALUES ( leftChilds );

        END LOOP;
    CLOSE cur;

END $$

当我调用程序时调用Comit();这回复了我的错误:

  

1048 - 列'log'不能为空

2 个答案:

答案 0 :(得分:0)

您的子查询正在生成NULL值,可能是因为proposer条件不匹配。当然,您的数据在NULL中的turnoverBalance或没有user一侧的行也可能有'left'个值。

在任何情况下,为什么使用游标来轻松完成单个查询?像这样的东西可以取代所有的逻辑:

INSERT INTO log(log)
    SELECT turoverBalance
    FROM user
    WHERE proposer IN (SELECT id FROM user) AND side = 'left')
    GROUP BY proposer;

答案 1 :(得分:0)

首先,它是存储过程,而不是触发器。 检查你的setChilds查询返回的内容,它应该返回一些值,单独运行它。 您可以签入存储过程
If(leftChilds not NULL) insert into log('log') values (leftChilds)