Использование разделителей в DB-Fiddle (MySQL 8.0) - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь создать хранимую процедуру на db-fiddle.com (https://www.db -fiddle.com / f / qMPGptFmKSNMJartC8yMfD / 1 ), и у меня возникают проблемы с выяснением того, что делать с моим оператором DELIMITER.

Я построил таблицы и код хранимой процедуры на стороне схемы, и я пытаюсь вызвать хранимую процедуру на стороне запроса.

DELIMITER //          
CREATE PROCEDURE conservation_count (IN con INT)
BEGIN
   DECLARE ytotal INT;
   SET ytotal := 0;
   SET ytotal := (SELECT COUNT(*) FROM Species, Animals
              WHERE Species.ID = Animals.species
              AND Species.ConservationStatus = con);
   SELECT ytotal;
   INSERT INTO conservation_ct VALUES (ytotal);
END //     
DELIMITER;

Это ошибка схемы, которую db-fiddle отправляет обратно:

Schema Error: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '// DELIMITER' at line 10

1 Ответ

0 голосов
/ 24 марта 2019

Итак, после дополнительного тестирования произошли две вещи:

  1. Мой последний разделитель нуждался в промежутке между разделителем и; - это, вероятно, вызывало ошибку DELIMITER
  2. DB-Fiddle не понравилась моя хранимая процедура. Когда я вынул внутренние переменные и упростил его, он отлично работает:

    DELIMITER //
    CREATE PROCEDURE conservation_count (IN var1 INT)
    BEGIN
    SELECT COUNT(*) FROM Species, Animals WHERE Species.ID = Animals.species 
    AND Species.ConservationStatus = var1 ;
    END //
    DELIMITER ;
    
...