2017-11-24 4 views
1

Ich bekomme einige SQL-Syntaxfehler, wenn ich versuche, eine einfache MySQL-Funktion Abfrage erstellen. Dies ist die Abfrage, die ich auf MySQL versucht habe. Dies funktioniert mit DB2. Ich möchte es auf MySQL ausführen.SQL-Syntaxfehler während einer Funktion erhalten Erstellen auf Jboss

CREATE FUNCTION MAC_ADDR 
    (
    IN M BIGINT 
) RETURNS VARCHAR(17) 
    LANGUAGE SQL 
    DETERMINISTIC 
    NO EXTERNAL ACTION 
    READS SQL DATA 
    BEGIN 
    DECLARE TMP BIGINT; 
    DECLARE RESULT VARCHAR(17) DEFAULT ''; 
    DECLARE B INTEGER; 
    DECLARE I INTEGER DEFAULT 0; 
    IF (M IS NOT NULL AND M > 0) THEN 
     SET TMP = M; 
     LOOP 
     IF I > 0 THEN 
      SET RESULT = ':' || RESULT; 
     END IF; 
     SET RESULT = SUBSTR(HEX(BITAND(TMP, 15)), 2, 1) || RESULT; 
     SET RESULT = SUBSTR(HEX(BITAND((TMP/16), 15)), 2, 1) || RESULT; 
     SET TMP = TMP/256; 
     SET I = I + 1; 
     IF (I > 5) THEN 
      RETURN UPPER(RESULT); 
     END IF; 
     END LOOP; 
    END IF; 
    RETURN '00:00:00:00:00:00'; 
    END; 

auf dem Server Nach dem Ausführen, ich bin nach immer Fehler

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN M BIGINT) 
    RETURNS VARCHAR(17) 
    LANGUAGE SQL 
    DETERMINISTIC 
    NO EXTERN' at line 1 

ist IN M BIGINT in MySQL? Irgendeine Syntax, die ich vermisse? Bitte vorschlagen .

Antwort

0
DELIMITER $$ 
CREATE FUNCTION MAC_ADDR 
    (
    M BIGINT 
) RETURNS VARCHAR(17) 
    LANGUAGE SQL 
    DETERMINISTIC 
    READS SQL DATA 
    BEGIN 
    DECLARE TMP BIGINT; 
    DECLARE RESULT VARCHAR(17) DEFAULT ''; 
    DECLARE B INTEGER; 
    DECLARE I INTEGER DEFAULT 0; 
    IF (M IS NOT NULL AND M > 0) THEN 
     SET TMP = M; 
     LOOP 
     IF I > 0 THEN 
      SET RESULT = ':' || RESULT; 
     END IF; 
     SET RESULT = SUBSTR(HEX(BITAND(TMP, 15)), 2, 1) || RESULT; 
     SET RESULT = SUBSTR(HEX(BITAND((TMP/16), 15)), 2, 1) || RESULT; 
     SET TMP = TMP/256; 
     SET I = I + 1; 
     IF (I > 5) THEN 
      RETURN UPPER(RESULT); 
     END IF; 
     END LOOP; 
    END IF; 
    RETURN '00:00:00:00:00:00'; 
    END$$ 
DELIMITER ; 

Weitere Informationen zu Funktionen, lesen Sie bitte:

https://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html

http://javajee.com/mysql-stored-procedure-and-stored-function-examples

Für Funktionserstellung, keine Notwendigkeit für Eingabeparameter geben IN. Delimiter wird verwendet, um dem MySQL-Client mitzuteilen, dass Sie eine Sql-Anweisung eingegeben haben, es sei denn, wir erhalten in der Funktion einen fehlenden Semikolonfehler.

+0

Vielen Dank für Ihren Vorschlag und Ihre Antwort. –

Verwandte Themen