【问题标题】:Mysql Trigger null resultMysql 触发空结果
【发布时间】:2016-01-22 21:17:58
【问题描述】:
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 - 列“日志”不能为空

【问题讨论】:

    标签: mysql triggers null


    【解决方案1】:

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

    在任何情况下,您为什么要将游标用于作为单个查询轻松完成的事情?这样的东西可以代替所有的逻辑:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 2019-01-13
        • 2012-08-10
        • 1970-01-01
        • 2019-07-02
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        相关资源
        最近更新 更多