如何执行与mysqli的multiquery自定义分隔符查询(How to execute cust

2019-10-19 20:03发布

我有以下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 ; 从脚本和替换$$通过; 并与多查询执行?

Answer 1:

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

mysql命令行接口支持DELIMITER通过解析预输入和分离由定界符语句。 然后分别执行每条语句。

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

采用多查询是一般一个坏主意,因为它创造了一个机会, 糟糕的SQL注入问题 。



文章来源: How to execute custom delimiter query with mysqli multiquery