创建存储过程时SQL语法报错求助:UPDATE语句单独执行正常
解决MariaDB创建存储过程时的1064语法错误
这个问题我之前也碰到过,大概率是语句分隔符冲突搞的鬼!
问题原因
默认情况下,MySQL/MariaDB的语句分隔符是;。当你创建存储过程时,存储过程内部的UPDATE语句也会用;结尾,这会让SQLyog误以为整个CREATE PROCEDURE语句在UPDATE的;处就结束了,导致后续的END被当成无效语法,从而抛出1064错误。
解决方案:修改会话分隔符
你需要先临时修改会话的分隔符(比如改成//或$$),让数据库知道直到遇到这个新分隔符,才标志着整个存储过程创建语句的结束。具体步骤如下:
- 先设置新的分隔符
DELIMITER //
- 编写完整的存储过程定义(注意加上UPDATE的关联条件,避免全表更新!)
CREATE PROCEDURE sim_management_update() BEGIN UPDATE bf_sim_management, test_sims SET bf_sim_management.sim_company_id = test_sims.company_id -- 必须加上关联条件,否则会造成全表错误更新! WHERE bf_sim_management.sim_id = test_sims.sim_id; END //
- 把分隔符改回默认的
;
DELIMITER ;
额外提醒
单独执行UPDATE语句正常,是因为此时只有一条语句,;能正确标识语句结束;但放在存储过程里时,必须处理分隔符冲突的问题。另外一定要记得给UPDATE加上关联条件,不然会导致bf_sim_management表的所有行都被更新,造成数据混乱!
内容的提问来源于stack exchange,提问作者Talha
相关产品推荐
相关产品推荐

