如何创建要插入的过程以返回插入的行



这是我当前的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语法有错误;查看与MariaDB服务器版本对应的手册,了解在'@title VARCHAR(255(、@body VARCHAR(255(,OUT@uuid INT(BEGIN附近使用的正确语法在第1行插入博客

我的数据库在uuid INT (255)上有一个AUTO_INCREMENT PRIMARY KEY,我想使用此过程返回它。任何帮助都会很棒。

我的桌子是这样的:

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;

您缺少参数类型定义,如INOUT等。此外,我认为在参数定义中不需要使用@

此外,我希望确保存储过程/触发器等中的变量/参数的名称与其中使用的任何表/列名不同。

此外,如果您还没有这样做,您需要将Delimiter重新定义为;以外的其他东西(如$$(;并在最后将其重新定义回CCD_ 8。

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 ;

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

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;

这是一个数据库<>不停摆弄

最新更新