MySQL简单INSERT存储过程无法运行问题求助
搞定存储过程
LinkTwoFlavors的加载/保存问题 老哥,你这情况我以前也碰到过——单行INSERT的存储过程正常跑,多语句版本就报错,还提示括号附近有问题,大概率是MySQL存储过程的几个语法细节没处理好,给你逐个排查:
1. 先把参数定义补完整
你贴的开头CREATE PROCEDURE LinkTwoFlavors(in selzidtwo I...明显没写完,参数必须明确类型(比如INT、VARCHAR(100)),而且参数列表末尾不能有多余逗号,比如正确的参数定义应该是:
CREATE PROCEDURE `LinkTwoFlavors`( IN selzidtwo INT, IN flavidtwo INT, IN some_other_param VARCHAR(50) -- 最后一个参数不要加逗号 )
参数没写全的话,Workbench会直接在参数列表这里报错,只是可能提示的位置不太准确。
2. 必须改DELIMITER!
这是最容易踩的坑:MySQL默认用;当语句结束符,如果你存储过程里有多个INSERT(或者多个带;的语句),Workbench会把第一个;当成整个存储过程的结束,直接报错。
解决办法是先临时换分隔符,比如用//,写完再切回来,示例如下:
-- 先改分隔符 DELIMITER // CREATE PROCEDURE `LinkTwoFlavors`( IN selzidtwo INT, IN flavidtwo INT ) BEGIN -- 第一个INSERT语句 INSERT INTO your_table(selection_id, flavor_id) VALUES(selzidtwo, flavidtwo); -- 第二个INSERT语句(如果有的话) INSERT INTO another_table(some_col) VALUES('test_value'); END // -- 用//结束存储过程 -- 改回默认分隔符 DELIMITER ;
3. 检查INSERT语句的括号匹配
Workbench提示flavidtwo后的括号有问题,那你得仔细看对应的INSERT:
- 列名列表和值列表的数量必须完全匹配,比如
INSERT INTO t(col1, col2) VALUES(val1)就会报错,少了val2 - 列名列表末尾不能多逗号,比如
INSERT INTO t(col1, col2,) VALUES(val1, val2)也是语法错误 - 变量引用要正确:如果
flavidtwo是输入参数,直接用就行,别加@(@是会话变量的前缀)
4. 检查BEGIN/END是否成对
确保所有的SQL语句都包裹在BEGIN和END之间,没有遗漏或者多余的括号,比如如果少了END,Workbench也会在奇怪的位置报错。
要是按照上面的步骤排查完还是不行,把完整的存储过程代码贴出来,我帮你精准定位问题~
内容的提问来源于stack exchange,提问作者J. G.
相关产品推荐
相关产品推荐

