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

0

Я пытаюсь создать хранимую процедуру в MySQL, которая добавит строки в две разные таблицы. Первая таблица (сайты) имеет столбец идентификатора, заданный для auto_increment, который я хотел бы включить во второй оператор insert в таблицу sitesByUser. Я пробовал некоторые идеи, основанные на этом превосходном сообщении: https://dba.stackexchange.com/questions/2973/how-to-insert-values-into-a-table-from-a-select-query-in- postgresql, но я получаю различные ошибки, например, перечисленные ниже. Я подозреваю, что часть моей проблемы заключается в том, что я пытаюсь добавить и userInput же таблицу, что и userInput и SELECT id FROM sites WHERE id=LAST_INSERT_ID(), но я не уверен, что делать, чтобы заставить это работать.

CREATE PROCEDURE createSite(IN siteName VARCHAR(2048), IN userInput VARCHAR(255))
BEGIN
INSERT INTO sites(siteName, user) VALUES (siteName, userInput);
INSERT INTO sitesByUser(user, site) userInput, SELECT id FROM sites WHERE id=LAST_INSERT_ID();
SELECT * FROM sitesByUser WHERE id=LAST_INSERT_ID();
END

Ответ от MySQL:

Error while performing Query.
ER_PARSE_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 'userInput, SELECT id FROM sites WHERE id=LAST_INSERT_ID();
SELECT * FROM sitesBy' at line 3
Теги:

2 ответа

0
Лучший ответ

Кажется, что правильный способ сделать это - сохранить LAST_INSERT_ID() в переменной, как описано здесь: Как объявить переменную в MySQL? Я не уверен, что я должен использовать символ @перед переменной, поскольку это, кажется, делает его определяемой пользователем переменной, что означает, что она специфична для сеанса, которая, вероятно, слишком широка для моих потребностей, но до сих пор, это успешно создает хранимую процедуру, которая, как я думаю, будет работать. Я обновлю этот пост, если этого не произойдет.

CREATE PROCEDURE createSite(IN siteName VARCHAR(2048), IN userInput VARCHAR(255))
BEGIN
INSERT INTO sites(siteName, user) VALUES (siteName, userInput);
SET @last_id_in_sites = LAST_INSERT_ID();
INSERT INTO sitesByUser(user, site) VALUES (userInput, @last_id_in_sites);
SELECT * FROM sitesByUser WHERE id=LAST_INSERT_ID();
END
1

Попробуй это

SET @last_id_in_table1 = LAST_INSERT_ID();
SELECT * FROM sitesByUser WHERE id=@last_id_in_table1;

Надеюсь это поможет

  • 0
    это было полезно?
  • 0
    Да, это было полезно, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню