Синтаксическая ошибка объявления переменных в MariaDB - PullRequest
1 голос
/ 04 марта 2020

У меня проблема со следующим запросом:

START TRANSACTION;
INSERT INTO posts
(
-- not relevant
)
VALUES
(
-- insert works as intended
);
COMMIT WORK AND CHAIN;

DECLARE @insertId INT; -- this is where i get the syntax error
SET @insertId = LAST_INSERT_ID();

UPDATE posts
SET guid = CONCAT('foo.bar?p=', @insertId)
WHERE id = @insertId;

-- continue to work with the variable
INSERT INTO postmeta(post_id, key, value)
VALUES
(@insertId, ..., ...),
(@insertId, ..., ...),
(@insertId, ..., ...),
(@insertId, ..., ...);
COMMIT WORK;

В основном я вставляю строку, и мне нужно обновить ее, используя автоматически увеличенный идентификатор сразу после вставки (для убедитесь, что я получаю правильное значение из функции LAST_INSERT_ID). Затем мне нужно заполнить другую таблицу, также используя автоматически увеличенный идентификатор. В этом случае я понял, что мне нужно сохранить значение в переменной. Почему я получаю следующее сообщение об ошибке? "У вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем вашей версии сервера MariaDB, рядом с 'DECLARE @insertId INT; SET @insertId = LAST_INSERT_ID ();' в строке 1 «Проблема в том, что я не создаю процедуру или пользовательскую функцию?

1 Ответ

0 голосов
/ 04 марта 2020

Я сделал быстрый поиск и нашел это на веб-сайте MariaDB (https://mariadb.com/kb/en/user-defined-variables/):

"Поскольку пользовательский тип переменных не может быть объявлен, единственный способ заставить их type использует CAST () или CONVERT () "

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

Я надеюсь, что это работает Я не очень знаком с MariaDB!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...