Как я могу определить синтаксическую ошибку в MySQL - PullRequest
0 голосов
/ 18 марта 2019

Я не могу точно определить синтаксическую ошибку в этой простой процедуре, и это сводит меня с ума в этой точке.

DELIMITER $$
DROP PROCEDURE IF EXISTS address_insert$$
CREATE PROCEDURE address_insert()
BEGIN
DECLARE i INT DEFAULT (SELECT COUNT(*) FROM hoop.address);
DECLARE counter INT DEFAULT 0;

WHILE counter < 5 DO 
SET i = i + 1;

INSERT INTO hoop.address (adr_id, address, city, country, created_at, lat, lng, updated_at, zip)
VALUES                   (i, CONCAT("Address-", i), "City", "United States", CURRENT_TIMESTAMP, (SELECT RAND() * (68-60) + 60), (SELECT RAND() * (65-55) + 55), CURRENT_TIMESTAMP, "ZIPCODE"); 

SET counter = counter + 1; 
END WHILE;
END$$
DELIMITER ;

Ответы [ 3 ]

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

В вашем коде нет синтаксической ошибки.Я протестировал его с клиентом MySQL, и он отлично работает.

Затем я скачал DBeaver и попробовал ваш запрос.Я обнаружил, что мне нужно выделить все строки в запросе, а затем выполнить с помощью Ctrl-Enter.

Если я не выделю все строки, кажется, что каждая строка выполняется отдельно как отдельный оператор SQL,независимо от настройки DELIMITER.

Теперь я удалю DBeaver.Не похоже, что это улучшит мою производительность.

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

Добавьте предыдущий разделитель после оператора, устанавливающего новый разделитель:

DELIMITER $$;

DELIMITER ;$$

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

[UPDATEA]

Выяснилось, что основная проблема в том, что mysql каким-то образом вообще не создает мою функцию.Что странно, учитывая, что у меня есть все привилегии для создания в базе данных.Есть предположения, почему это может быть?

...