我有以下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 ;
并将$$
替换为;
并使用多个查询执行,那么它会起作用吗?
答案 0 :(得分:1)
不,通过MySQL API无法实现。分号分隔符不可配置。它确实在MySQL服务器端确定。有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html
mysql
命令行界面支持DELIMITER
,通过分隔符预解析输入和分隔语句。然后它分别执行每个语句。
您无需使用多查询。您应该将DROP FUNCTION
和CREATE FUNCTION
作为单独的查询运行。
一般来说,使用多次查询是一个坏主意,因为它为bad SQL injection problems创造了机会。