2014-04-11 64 views
1

我有以下SQL腳本執行自定義分隔符查詢,我想用multiquery如何使用mysqli的multiquery

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 ;並將$$替換爲;並使用多查詢執行,它會起作用嗎?

回答

1

不,通過MySQL API是不可能的。分號分隔符不可配置。它確實在MySQL服務器端確定。有關更多詳細信息,請參見http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html

mysql命令行界面支持DELIMITER通過預分析輸入和用分隔符分隔語句。然後它分別執行每個語句。

沒有理由需要使用多重查詢。您應該運行DROP FUNCTIONCREATE FUNCTION作爲單個查詢。

使用多查詢通常是一個壞主意,因爲它爲bad SQL injection problems創建了一個機會。