0
CREATE TABLE INPUT ( NUM INT );
INSERT INTO INPUT VALUES (1);
CREATE TABLE OUTPUT ( NUM INT );

DELIMITER //

CREATE PROCEDURE TEST_LOOP()
BEGIN
  DECLARE NUMBER INT;

  DECLARE DONE TINYINT DEFAULT 0;
  DECLARE REC CURSOR FOR SELECT NUM FROM INPUT;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = 1;

  DELETE FROM OUTPUT;

  OPEN REC;
    L: LOOP
      FETCH REC INTO NUMBER;
      IF DONE = 1 THEN
        LEAVE L;
      END IF;

      INSERT INTO OUTPUT VALUES (NUMBER);
    END LOOP;
  CLOSE REC;
END //

DELIMITER ;

然后我运行CALL TEST_LOOP();,程序按预期运行(OUTPUT 表中的一条记录)但产生警告说:

No data - zero rows fetched, selected, or processed.

警告来自哪里?

4

1 回答 1

0

它实际上是源自 MySQL 5.5的 MariaDB 中的一个活跃错误。

来自MySQL 5.5 手册

在 MySQL 5.6.3 之前,如果生成警告或错误的语句导致调用条件处理程序,则处理程序可能不会清除诊断区域。这可能会导致处理程序没有被调用。

于 2013-06-28T05:37:22.563 回答