2014-05-13 60 views
0

如何執行用戶定義的函數以便數據庫能識別該函數是否已創建?用戶定義的函數MySQL Workbench

DELIMITER $$ 
CREATE FUNCTION `StudentGPA` (StudentID int, ClassStartDateStart datetime, ClassStartDateEnd date time) RETURNS decimal(3,2) 
BEGIN 

Declare AvgGPA decimal(3,2); 

SELECT AvgGPA= isNULL(Avg(GPA), 0.0) 
FROM Students_Classes 
WHERE StudentID = StudentID 
    AND StartDate > ClassStartDateStart 
    AND StartDate <= ClassStartDateEnd 
    AND GPA > 0; RETURN AvgGPA; 

END 
+1

您是否收到任何錯誤?你也應該在你的'END'語句中添加一個分隔符,就像'END $$'一樣,然後使用'DELIMITER;' –

+0

來更改分隔符。就程序而言,代碼本身沒有錯誤。在END之後或之前,我會在哪裏更改代碼中的分隔符? – user67946

+0

當我將它從Query選項卡中指定爲Execute Statement時,它不會執行任何操作。 – user67946

回答

0

運行代碼時,應該會出現語法錯誤。在您指定參數的CREATE聲明中,您需要將ClassStartDateEnd date time更改爲ClassStartDateEnd datetime

DELIMITER $$ 
CREATE FUNCTION `StudentGPA` 
    (StudentID int, 
    ClassStartDateStart datetime, 
    ClassStartDateEnd datetime) 
    RETURNS decimal(3,2) 

BEGIN 

    Declare AvgGPA decimal(3,2); 

    SELECT AvgGPA= isNULL(Avg(GPA), 0.0) 
    FROM Students_Classes 
    WHERE StudentID = StudentID 
    AND StartDate > ClassStartDateStart 
    AND StartDate <= ClassStartDateEnd 
    AND GPA > 0; RETURN AvgGPA; 

END$$ 
DELIMITER ; 

我也用你的$$ DELIMITER您END語句之後正確地終止了CREATE,然後設置分隔符回;這是很好的做法。

+0

它現在回來並且表示不允許返回結果集。感謝您的幫助。 – user67946

+0

如果將其更改爲類似'AvgGPA =(SELECT ....)'應避免該錯誤。 –