繁体   English   中英

如何使用mysqli multiquery执行自定义定界符查询

[英]How to execute custom delimiter query with mysqli multiquery

我有以下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 ;它将起作用DELIMITER ; 从脚本中替换$$; 并执行多查询?

不,不可能通过MySQL API。 分号分隔符不可配置。 这是在MySQL服务器端确定的。 有关更多详细信息,请参见http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html

mysql命令行界面通过预定义输入和使用分隔符分隔语句来支持DELIMITER 然后,它分别执行每个语句。

没有理由您需要使用多查询。 您应该将DROP FUNCTIONCREATE FUNCTION作为单独的查询运行。

通常,使用多重查询是一个坏主意,因为它为不良的SQL注入问题创造了机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM