2016-06-08 9 views
0

Hey Jungs Entschuldigung für diese Frage noob, ich versuche, mysql zu lernen, aber ich bin bei der Erstellung udf fest. Kann jemand bitte erklären, warum das Syntaxfehler ist und was die mögliche Behebung ist. Dank[Q]: Syntaxfehler beim Erstellen von UDF in Mysql

create FUNCTION temtotalgrades 
(@p_Studid int, @p_year int) 
RETURNS int 
BEGIN 
return (SELECT CONCAT(fname, " ", lname, '\n', GROUP_CONCAT 
(student_grades.subject_id, " = ", student_grades.final SEPARATOR '\n')) 
FROM student_grades 
INNER JOIN student ON student.studid = student_grades.studid 
where student.studid = @p_Studid and year = @p_year  
GROUP BY student_grades.studid) 
END 
+0

Dies ist kein UDF ist. Dies ist eine gespeicherte Funktion. Ersteres wird in C geschrieben und verwendet die Plugin-Hooks, um dem Server eine globale Funktion hinzuzufügen. Letzteres ist in SQL geschrieben. –

Antwort

0

Ein paar Punkte ...

Eine Funktion einen einzelnen Wert zurückgibt.

Der Rückgabewert muss dem für RETURN angegebenen Typ entsprechen.

Das Zeichen @ wird für die Benennung benutzerdefinierte Variablen verwendet, nicht für Prozedur/Funktionsvariablen/Parameter.

Als Beispiel versuchen, etwas wie folgt aus:

DELIMITER $$ 

CREATE FUNCTION temtotalgrades 
(p_studid INT 
, p_year INT 
) RETURNS VARCHAR(4000) 
BEGIN 
    DECLARE v_myret VARCHAR(4000); 
    SELECT CONCAT(s.fname 
       , ' ' 
       , s.lname 
       , '\n' 
       , GROUP_CONCAT(
        CONCAT(g.subject_id,' = ',g.final) 
        SEPARATOR '\n' 
       ) 
     ) 
    INTO v_myret 
    FROM student_grades g 
    JOIN student s ON s.studid = g.studid 
    WHERE s.studid = p_studid 
    AND g.year = p_year; 
    RETURN v_myret; 
END$$ 

DELIMITER ; 
+0

danke, sehr informativ. – noobme

Verwandte Themen