MySQL SP с правильным синтаксисом транзакции в параметрах - PullRequest
0 голосов
/ 04 февраля 2020

Проще говоря, как выглядит мой SP, по сути, это как минимум синтаксис

DELIMITER $$
DROP PROCEDURE IF EXISTS `info_insert_or_update` $$

CREATE PROCEDURE `info_insert_or_update` (
    IN in_id bigint,
    IN in_name varchar(150),
    IN in_details varchar(150))

START TRANSACTION;
    INSERT INTO infos (id, name)
VALUES (in_id, in_name)
ON DUPLICATE KEY UPDATE name = in_name;

INSERT INTO details (details_id, details)
VALUES(in_id,
            in_details)
    ON DUPLICATE KEY UPDATE details = in_details;
COMMIT;
END$$
DELIMITER ;

При этом проблема заключается в том, что он не может распознавать переменные in_, и я понимаю, что это потому, что я Мне нужно составное утверждение с BEGIN END вокруг всего, но где бы я ни выражался, это неправильно с синтаксисом. Итак, каков правильный синтаксис, когда я получил этот тип SP с параметрами, которые затем имеют транзакцию? (хочу транзакцию, так как я добавлю откат на нее)

1 Ответ

3 голосов
/ 04 февраля 2020

Вам не хватает типа данных для in_details -параметра, и вам не хватает начального BEGIN

DELIMITER $$
DROP PROCEDURE IF EXISTS `info_insert_or_update`
$$
CREATE PROCEDURE `info_insert_or_update` (
in_id bigint,
in_name varchar(150),
in_details varchar(150)
)
BEGIN

START TRANSACTION;

INSERT INTO infos (id, name)
VALUES (in_id, in_name)
  ON DUPLICATE KEY UPDATE name = in_name;

INSERT INTO details (details_id, details)
VALUES(in_id, in_details)
  ON DUPLICATE KEY UPDATE details = in_details;

COMMIT;


END
$$
...