由于工作的原因好久没写博客了。
今天遇到一个问题,存储过程在线上用source执行报错,但是在测试库就没问题。经查找是DELIMITER与//之间缺少一个空格的原因。
DROP PROCEDURE IF EXISTS `SP_TEST`;
DELIMITER//
CREATE PROCEDURE `SP_TEST`(IN P_RecId INT(11),IN P_OperateType INT(11))
SQL SECURITY INVOKER
COMMENT 'xxxx'
BEGIN
-- XXXXXXXXXx
END//
DELIMITER ;
改成
DROP PROCEDURE IF EXISTS `SP_TEST`;
DELIMITER //
CREATE PROCEDURE `SP_TEST`(IN P_RecId INT(11),IN P_OperateType INT(11))
SQL SECURITY INVOKER
COMMENT 'xxxx'
BEGIN
-- XXXXXXXXXx
END//
DELIMITER ;
就好了。
DELIMITER //
DELIMITER ;
这里一定是有空格的。
尤其是在sql_mode为
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
的情况下。