2016-08-02 23 views
2

Ich versuche, die folgende Funktion zu kompilieren, aber viel Syntaxfehler zu bekommen. Welche Fehler begehe ich? Fehle ich etwas? Können wir die Länge von Zeichen im Rückgabetyp angeben?Syntaxfehler beim Versuch, eine Funktion zu kompilieren

create function generate_invoice_number(id int) returns varchar(11) 
    deterministic 
begin 
    declare invoiceId varchar(11) default null; 
    /** 
     * Here id refers to the ID that is generated in the 
    * invoice table. 
    */ 
    if id is not null and id > 0 
     then 
      set invoiceId = concat('QUA-',lpad(id,7,'0')); 
    end if; 

    return invoiceId; 
end; 

Fehler:

Fehlercode: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL Server Version für die richtige Syntax in der Nähe von '' in Zeile 4 entspricht (0 ms genommen)

Fehlercode: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe 'if id ist nicht null und id> 0 dann set invoiceId = concat (' QUA - ', lpad (id, 7,' at line 5 (0 ms genommen)

Fehlercode: 1064 Sie haben einen Fehler in der SQL-Syntax, überprüfen Sie das Handbuch, das für die richtige Syntax verwendet in der Nähe von ‚end if‘ in Zeile 1 zu Ihrer MySQL-Server-Version entspricht (0 ms genommen)

Fehlercode: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax, überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige -Syntax entspricht Verwenden Sie in der Nähe von 'Return InvoiceId' in Zeile 1 (0 ms genommen)

Fehlercode: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie die Handbuch, das für die richtige Syntax verwenden in der Nähe von 'end' in Zeile 1 (0 ms genommen)

+0

Verwenden Sie einen Client wie Workbench oder geben Sie einfach die Erstellung der Funktion in eine Terminalmodus-Schnittstelle zu MySQL ein? – FDavidov

+0

@FDavidov 'SQLYog' –

+1

Entschuldigung, kenne ich nicht. Die einzige Sache, die mir in den Sinn kommt, ist die Tatsache, dass Sie bei der Verwendung des Terminal-Modus eine Prozedur/Funktionserstellung mit einer 'delimiter'-Anweisung umbrechen müssen (ich weiß nicht, ob dies für SQLYog relevant ist). Entschuldigung, ich kann dir nicht mehr helfen. – FDavidov

Antwort

1

Sie müssen definieren eine delimiter für diese zu Ihrem MySQL-Server-Version entspricht:

delimiter $$ 

create function generate_invoice_number(id int) returns varchar(11) 
    deterministic 
begin 
    declare invoiceId varchar(11) default null; 
    /** 
     * Here id refers to the ID that is generated in the 
    * invoice table. 
    */ 
    if id is not null and id > 0 
     then 
      set invoiceId = concat('QUA-',lpad(id,7,'0')); 
    end if; 

    return invoiceId; 
end$$ 

delimiter ;