MySQL存储过程初学者错误
我正在学习MySQL存储过程,但我有点被我试图创建的过程难住了MySQL存储过程初学者错误,mysql,stored-procedures,Mysql,Stored Procedures,我正在学习MySQL存储过程,但我有点被我试图创建的过程难住了 CREATE PROCEDURE tag_inserts ( IN myTag VARCHAR(255), IN profileID INT(11) ) BEGIN INSERT IGNORE INTO tags(tag) VALUES(myTag); SET @lid = LAST_INSERT_ID(); IF(@lid = 0, (SELECT tagid FROM tags WHERE tag = myTag)
CREATE PROCEDURE tag_inserts
(
IN myTag VARCHAR(255),
IN profileID INT(11)
)
BEGIN
INSERT IGNORE INTO tags(tag) VALUES(myTag);
SET @lid = LAST_INSERT_ID();
IF(@lid = 0,
(SELECT tagid FROM tags WHERE tag = myTag),
(INSERT INTO profile_hashtags (pid,tagid) VALUES (profileID,@lid)));
END
当我执行它时,它会给我以下错误
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用接近“INTO profile_hashtags(pid,tagid)值(profileID,@lid))的正确语法;
在第13行结束
您使用的函数用于表达式的条件求值。您需要的是程序流控件,它将如下所示:
-- Some client apps require DELIMITER directives, and some don't.
DELIMITER //
CREATE PROCEDURE tag_inserts (IN myTag VARCHAR(255), IN profileID INT(11))
BEGIN
INSERT IGNORE INTO tags (tag)
VALUES (myTag);
SET @lid = LAST_INSERT_ID();
IF @lid = 0 THEN
SELECT tagid
INTO @lid
FROM tags
WHERE tag = myTag;
INSERT INTO profile_hashtags
(pid, tagid)
VALUES
(profileID, @lid);
END IF;
END;
-- Some client apps require DELIMITER directives, and some don't.
//
DELIMITER ;
另请注意选择。。。进入
语法,用于将选定值检索到过程变量中。您使用的函数用于表达式的条件求值。您需要的是程序流控件,它将如下所示:
-- Some client apps require DELIMITER directives, and some don't.
DELIMITER //
CREATE PROCEDURE tag_inserts (IN myTag VARCHAR(255), IN profileID INT(11))
BEGIN
INSERT IGNORE INTO tags (tag)
VALUES (myTag);
SET @lid = LAST_INSERT_ID();
IF @lid = 0 THEN
SELECT tagid
INTO @lid
FROM tags
WHERE tag = myTag;
INSERT INTO profile_hashtags
(pid, tagid)
VALUES
(profileID, @lid);
END IF;
END;
-- Some client apps require DELIMITER directives, and some don't.
//
DELIMITER ;
另请注意
选择。。。进入
语法,用于将选定值检索到过程变量中。感谢您的解释。这是新的输出。SQL查询:创建过程标记_插入(在myTag VARCHAR(255)中,在profileID INT(11)中)开始插入忽略到标记(标记)值('myTag');MySQL说:文档#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行“您使用的是什么客户端”附近要使用的正确语法?Workbench,mysql
,phpMyAdmin…?一些mysql客户端,尤其是mysql
和mysql Workbench,在输入复合语句时需要使用。我已经在上面的解决方案中添加了它们。Darwin,是的,就是这样,我通常在MySQL中使用toad,但出于某种原因,我试图直接在phpMyAdmin中执行此操作,当我添加分隔符时,一切正常。谢谢你的帮助。我将继续并开始阅读更多关于MySQL存储过程的内容:)感谢您的解释。这是新的输出。SQL查询:创建过程标记_插入(在myTag VARCHAR(255)中,在profileID INT(11)中)开始插入忽略到标记(标记)值('myTag');MySQL说:文档#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行“您使用的是什么客户端”附近要使用的正确语法?Workbench,mysql
,phpMyAdmin…?一些mysql客户端,尤其是mysql
和mysql Workbench,在输入复合语句时需要使用。我已经在上面的解决方案中添加了它们。Darwin,是的,就是这样,我通常在MySQL中使用toad,但出于某种原因,我试图直接在phpMyAdmin中执行此操作,当我添加分隔符时,一切正常。谢谢你的帮助。我将继续并开始阅读更多关于MySQL存储过程的内容:)