如何创建一个insert过程,返回插入的行

yfwxisqw  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(378)

以下是我当前的sql:

CREATE PROCEDURE addBlog(@title VARCHAR(255), @body VARCHAR(255), OUT @uuid INT) BEGIN
    INSERT INTO blogs b (b.title, b.detail) VALUES (@title, @body);
    SELECT LAST_INSERT_ID() INTO @uuid;
    SELECT @uuid;
END

引发此错误(直接从sql导出):
1064-您的sql语法有错误;在第1行的“@title varchar(255),@body varchar(255),out@uuid int)begin insert into blog”附近,检查与您的mariadb服务器版本对应的手册,以获得正确的语法
我的数据库有一个 AUTO_INCREMENT PRIMARY KEYuuid INT (255) 我想用这个程序返回。任何帮助都会很好。
我的table是这样的:

CREATE TABLE `blogs` (
  `uuid` int(255) NOT NULL,
  `title` varchar(1024) NOT NULL,
  `detail` varchar(1024) NOT NULL,
  `user_id` int(255) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `blogs`
  ADD PRIMARY KEY (`uuid`),
  ADD KEY `user_id` (`user_id`);

ALTER TABLE `blogs`
  MODIFY `uuid` int(255) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

ALTER TABLE `blogs`
  ADD CONSTRAINT `blogs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` 
(`uuid`) ON DELETE NO ACTION ON UPDATE NO ACTION;

更新的sql:

CREATE PROCEDURE addBlog(
    IN in_title VARCHAR(255),
    IN in_body VARCHAR(255), 
    IN in_user INT(255),
    OUT out_uuid INT
) BEGIN
    INSERT INTO `blogs` (`title`, `detail`, `user_id`) VALUES (in_title, in_body, in_user);
    SELECT LAST_INSERT_ID() INTO out_uuid;
    SELECT out_uuid;
END;
y0u0uwnf

y0u0uwnf1#

您的语法是来自多个数据库的奇怪的mish mash。我想你想要:

CREATE PROCEDURE addBlog (
    in_title VARCHAR(255),
    in_body VARCHAR(255),
    OUT out_uuid INT
)
BEGIN
    INSERT INTO blogs (title, detail)
        VALUES (in_title, in_body);
    SELECT LAST_INSERT_ID() INTO out_uuid;
    -- SELECT out_uuid;
END;

这是一把小提琴。

70gysomp

70gysomp2#

缺少参数类型定义,例如 IN , OUT 还有,我认为你不需要 @ ,在参数定义中。
另外,我希望确保存储过程/触发器等中的变量/参数的名称与其中使用的任何表/列名不同。
另外,如果您还没有这样做,您需要将分隔符重新定义为其他内容(例如, $$ )除 ; ; 重新定义为 ; 最后。

DELIMITER $$ -- define the delimiter

CREATE PROCEDURE addBlog(IN title_in VARCHAR(255), -- added suffix "in" to param name
                         IN body_in VARCHAR(255), 
                         OUT uuid_out INT) BEGIN
...... 

END $$ -- end of stored procedure
DELIMITER ; -- redefine delimiter back to ;

相关问题