Ошибка #1064 запросе SQL в phpMyAdmin
Имеется таблица preliminary_schema:
Пытаюсь создать процедуру, которая добавляет запись в таблицу следующим образом:
- если не имеется записей со значением поля player_mode, похожим на "Player", то добавляем в таблицу запись:
INSERT INTO preliminary_schema VALUES (new_name, 'Player1', 0, 0).
- если подобная запись имеется, то добавляем запись:
INSERT INTO preliminary_schema VALUES (new_name, 'Player2', 0, 0).
Процедура следующего вида:
CREATE PROCEDURE AddPlayer(new_name VARCHAR(30))
BEGIN
CASE (SELECT COUNT(*) FROM preliminary_schema WHERE player_mode LIKE 'Player%')
WHEN 0 THEN INSERT INTO preliminary_schema VALUES (new_name, 'Player1', 0, 0)
WHEN 1 THEN INSERT INTO preliminary_schema VALUES (new_name, 'Player2', 0, 0)
END
Выдаёт ошибку:
1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'WHEN 1 THEN INSERT INTO preliminary_schema VALUES (new_name, 'Player2', 0, 0)' на строке 5.
Подскажите, пожалуйста, чего делаю не так ? Или как правильней оформить эту мысль в коде
Ответы (1 шт):
В CASE надо передавать переменную а не курсор. простыми словами. select в общем случае возвращает кучу записей из кучи полей. В CASE вам надо явно указать значение. см. ниже.
DELIMITER $$
CREATE PROCEDURE AddPlayer(new_name VARCHAR(30))
BEGIN
DECLARE c INT DEFAULT 0;
SELECT COUNT(*) into c FROM preliminary_schema WHERE player_mode LIKE 'Player%';
CASE (c)
WHEN 0 THEN INSERT INTO preliminary_schema VALUES (new_name, 'Player1', 0, 0);
WHEN 1 THEN INSERT INTO preliminary_schema VALUES (new_name, 'Player2', 0, 0);
ELSE INSERT INTO preliminary_schema VALUES (new_name, 'PlayerX', 0, 0);
END CASE;
END;
хотя в вашем случае (хотя я и не знаю задумки), было бы симпатичнее сделать так:
DECLARE c INT DEFAULT 0;
SELECT COUNT(*) into @c FROM preliminary_schema WHERE player_mode LIKE 'Player%';
INSERT INTO preliminary_schema VALUES (new_name, case c when 0 then 'Player1' when 1 then 'Player2' else 'PlayerX' end, 0, 0);
