我有下面的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 ;
并将 $$
替换为 ;
,它会工作吗并执行多查询?
最佳答案
不,通过 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 创造了机会.
关于php - 如何使用 mysqli 多查询执行自定义分隔符查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004895/