我有以下sql脚本,我想用多个查询来执行它
DELIMITER $$
DROP FUNCTION IF EXISTS `getAttendanceHistoryDates`$$
CREATE FUNCTION getAttendanceHistoryDates(processDate date)
RETURNS TEXT
DETERMINISTIC
LANGUAGE SQL
BEGIN
DECLARE minDate date;
DECLARE startYear int;
DECLARE endYear int;
DECLARE dateString TEXT;
SET minDate = (SELECT MIN(date) FROM `ohrm_attendance_report`);
SET startYear = YEAR(minDate);
SET endYear = YEAR(processDate);
SET dateString = processDate;
WHILE startYear < endYear DO
SET dateString = CONCAT(dateString,'|',CONCAT(startYear, '-12-31'));
SET startYear = startYear + 1;
END WHILE;
RETURN dateString;
END;
$$
DELIMITER ;有办法这样做吗?如果我从脚本中删除DELIMITER $$和DELIMITER ;,用;替换$$并用多个查询执行,它会起作用吗?
发布于 2014-04-11 06:23:38
不,通过MySQL API是不可能的。分号分隔符是不可配置的。它确实是由MySQL服务器端决定的。有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html
mysql命令行接口通过预解析输入和分隔符分隔语句来支持DELIMITER。然后,它分别执行每个语句。
没有理由需要使用多查询。您应该将DROP FUNCTION和CREATE FUNCTION作为单独的查询运行。
一般来说,使用多查询是个坏主意,因为它为错误的SQL注入问题创造了一个机会。
https://stackoverflow.com/questions/23004895
复制相似问题