Mysql过程执行多次

问题描述 投票:0回答:1

我有一个 MySQL 程序来从表中导出一些内容。当我编写它时,它运行得很好,但现在当我想重新执行它时,它会运行多次。

这是我的程序:

DELIMITER //

CREATE PROCEDURE count_null(IN tbl_name VARCHAR(255))
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE col_name VARCHAR(255);
    DECLARE col_type VARCHAR(50);
    DECLARE cur CURSOR FOR 
        SELECT column_name, data_type
        FROM information_schema.columns
        WHERE table_name = tbl_name; -- Use a different name for parameter
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO col_name, col_type;
        IF done THEN
            LEAVE read_loop;
        END IF;

        SET @where_clause = '';
        IF col_type = 'date' THEN
            SET @where_clause = CONCAT(col_name, ' IS NULL');
        ELSE
            SET @where_clause = CONCAT(col_name, ' IS NULL OR ', col_name, ' = ""');
        END IF;

        SET @sql = CONCAT('SELECT ', QUOTE(col_name), ' AS column_name, COUNT(*) AS count FROM ', tbl_name, ' WHERE ', @where_clause, ';');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP;
    CLOSE cur;
END//

DELIMITER ;

我运行它:

CALL count_null('TABLENAME');

其输出是这样的:

+--------------+-------+
| column_name  | count |
+--------------+-------+
| baltimore_id |     0 |
+--------------+-------+
1 row in set (0.00 sec)

+---------------+-------+
| column_name   | count |
+---------------+-------+
| molecule_type |     0 |
+---------------+-------+
1 row in set (0.00 sec)

+--------------+-------+
| column_name  | count |
+--------------+-------+
| baltimore_id |     0 |
+--------------+-------+
1 row in set (0.00 sec)

+---------------+-------+
| column_name   | count |
+---------------+-------+
| molecule_type |     0 |
+---------------+-------+
1 row in set (0.00 sec)

+--------------+-------+
| column_name  | count |
+--------------+-------+
| baltimore_id |     0 |
+--------------+-------+
1 row in set (0.00 sec)

+---------------+-------+
| column_name   | count |
+---------------+-------+
| molecule_type |     0 |
+---------------+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

此外,工作台的日志显示该过程执行了多次。

如何解决/防止这个问题? (ps. 对于那些没有仔细阅读问题的人,我知道输出,就可以了!只需将程序执行限制为一个周期即可。)

mysql stored-procedures
1个回答
0
投票

终于找到了。这不是由于环境变量造成的。我从 [MySQL 8.0.36] 切换到旧版本 [MySQL 8.0.204],它现在可以工作了。我不知道这两者有什么区别,但现在很好。

© www.soinside.com 2019 - 2024. All rights reserved.