今天让公司的DBA鄙视了一顿,也是我做的不好。很多环境的数据库,命令行比可视化工具常见。我提交了以下脚本,结果命令行执行报错。
CREATE FUNCTION func_split_str( x VARCHAR(5000), delim VARCHAR(12), pos INT)RETURNS VARCHAR(500)BEGINRETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');END
原因是:delimiter是mysql分隔符,在mysql客户端中分隔符默认是分号(;)。如果一次输入的语句较多,并且语句中间有分号,这时候mysql客户端认为当前语句已经执行完毕,其实未执行完毕,这时需要新指定一个特殊的分隔符。
改为以下sql,正常运行。
DELIMITER $$CREATE FUNCTION func_split_str( x VARCHAR(5000), delim VARCHAR(12), pos INT)RETURNS VARCHAR(500)BEGINRETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');END$$DELIMITER ;