MySQL 具有事务正确语法和参数的 SP

MySQL SP with transaction correct syntax with in parameters

简单地说,我的 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 围绕所有内容但我似乎把它放在哪里语法有问题。那么,当我使用 in 参数获得这种类型的 SP 然后进行交易时,正确的语法是什么? (想要交易,因为我也会在上面添加回滚)

您缺少 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
$$