这个SQL函数有什么错误

时间:2014-04-15 03:07:12

标签: mysql sql

我试图在论坛中使用用户发布的此功能:http://pastebin.com/Jf9CkQ5f

帖子已经过时了,我无法联系原作者。

我将脚本放在Mysql客户端上,但是当我点击运行查询时出现此错误:

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 '' at line 4: 

但在第4行我只是有一个声明,有人可以帮助我吗?

更新:这是源

Create FUNCTION letras(Numero NUMERIC(20,2),  XMoneda VARCHAR(100)) RETURNS VARCHAR(512) 
DETERMINISTIC 
BEGIN
    DECLARE XlnEntero int; 
    DECLARE XlcRetorno VARCHAR(512); 
    DECLARE XlnTerna INT; 
    DECLARE XlcMiles VARCHAR(512); 
    DECLARE XlcCadena VARCHAR(512); 
    DECLARE XlnUnidades INT; 
    DECLARE XlnDecenas INT; 
    DECLARE XlnCentenas INT; 
    DECLARE XlnFraccion INT; 
    DECLARE Xresultado varchar(512); 

    SET XlnEntero = FLOOR(XNumero); 
    SET XlnFraccion = (XNumero - XlnEntero) * 100; 
    SET XlcRetorno = ''; 
    SET XlnTerna = 1 ; 
        WHILE( XlnEntero > 0) DO 

            #Recorro terna por terna 
            SET XlcCadena = ''; 
            SET XlnUnidades = XlnEntero MOD 10; 
            SET XlnEntero = FLOOR(XlnEntero/10); 
            SET XlnDecenas = XlnEntero MOD 10; 
            SET XlnEntero = FLOOR(XlnEntero/10); 
            SET XlnCentenas = XlnEntero MOD 10; 
            SET XlnEntero = FLOOR(XlnEntero/10); 

            #Analizo las unidades 
            SET XlcCadena = 
                CASE # UNIDADES 
                    WHEN XlnUnidades = 1 AND XlnTerna = 1 THEN CONCAT('UNO ', XlcCadena) 
                    WHEN XlnUnidades = 1 AND XlnTerna <> 1 THEN CONCAT('UN ', XlcCadena) 
                    WHEN XlnUnidades = 2 THEN CONCAT('DOS ', XlcCadena) 
                    WHEN XlnUnidades = 3 THEN CONCAT('TRES ', XlcCadena) 
                    WHEN XlnUnidades = 4 THEN CONCAT('CUATRO ', XlcCadena) 
                    WHEN XlnUnidades = 5 THEN CONCAT('CINCO ', XlcCadena) 
                    WHEN XlnUnidades = 6 THEN CONCAT('SEIS ', XlcCadena) 
                    WHEN XlnUnidades = 7 THEN CONCAT('SIETE ', XlcCadena) 
                    WHEN XlnUnidades = 8 THEN CONCAT('OCHO ', XlcCadena) 
                    WHEN XlnUnidades = 9 THEN CONCAT('NUEVE ', XlcCadena) 
                    ELSE XlcCadena 
                END; #UNIDADES 

            #Analizo las decenas 
            SET XlcCadena = 
                CASE #DECENAS 
                    WHEN XlnDecenas = 1 THEN 
                        CASE XlnUnidades 
                            WHEN 0 THEN 'DIEZ ' 
                            WHEN 1 THEN 'ONCE ' 
                            WHEN 2 THEN 'DOCE ' 
                            WHEN 3 THEN 'TRECE ' 
                            WHEN 4 THEN 'CATORCE ' 
                            WHEN 5 THEN 'QUINCE' 
                            ELSE CONCAT('DIECI', XlcCadena) 
                        END 
                    WHEN XlnDecenas = 2 AND XlnUnidades = 0 THEN CONCAT('VEINTE ', XlcCadena) 
                    WHEN XlnDecenas = 2 AND XlnUnidades <> 0 THEN CONCAT('VEINTI', XlcCadena) 
                    WHEN XlnDecenas = 3 AND XlnUnidades = 0 THEN CONCAT('TREINTA ', XlcCadena) 
                    WHEN XlnDecenas = 3 AND XlnUnidades <> 0 THEN CONCAT('TREINTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 4 AND XlnUnidades = 0 THEN CONCAT('CUARENTA ', XlcCadena) 
                    WHEN XlnDecenas = 4 AND XlnUnidades <> 0 THEN CONCAT('CUARENTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 5 AND XlnUnidades = 0 THEN CONCAT('CINCUENTA ', XlcCadena) 
                    WHEN XlnDecenas = 5 AND XlnUnidades <> 0 THEN CONCAT('CINCUENTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 6 AND XlnUnidades = 0 THEN CONCAT('SESENTA ', XlcCadena) 
                    WHEN XlnDecenas = 6 AND XlnUnidades <> 0 THEN CONCAT('SESENTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 7 AND XlnUnidades = 0 THEN CONCAT('SETENTA ', XlcCadena) 
                    WHEN XlnDecenas = 7 AND XlnUnidades <> 0 THEN CONCAT('SETENTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 8 AND XlnUnidades = 0 THEN CONCAT('OCHENTA ', XlcCadena) 
                    WHEN XlnDecenas = 8 AND XlnUnidades <> 0 THEN CONCAT('OCHENTA Y ', XlcCadena) 
                    WHEN XlnDecenas = 9 AND XlnUnidades = 0 THEN CONCAT('NOVENTA ', XlcCadena) 
                    WHEN XlnDecenas = 9 AND XlnUnidades <> 0 THEN CONCAT('NOVENTA Y ', XlcCadena) 
                    ELSE XlcCadena 
                END; #DECENAS 

            # Analizo las centenas 
            SET XlcCadena = 
                CASE # CENTENAS 
                    WHEN XlnCentenas = 1 AND XlnUnidades = 0 AND XlnDecenas = 0 THEN CONCAT('CIEN ', XlcCadena) 
                    WHEN XlnCentenas = 1 AND NOT(XlnUnidades = 0 AND XlnDecenas = 0) THEN CONCAT('CIENTO ', XlcCadena) 
                    WHEN XlnCentenas = 2 THEN CONCAT('DOSCIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 3 THEN CONCAT('TRESCIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 4 THEN CONCAT('CUATROCIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 5 THEN CONCAT('QUINIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 6 THEN CONCAT('SEISCIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 7 THEN CONCAT('SETECIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 8 THEN CONCAT('OCHOCIENTOS ', XlcCadena) 
                    WHEN XlnCentenas = 9 THEN CONCAT('NOVECIENTOS ', XlcCadena) 
                    ELSE XlcCadena 
                END; #CENTENAS 

            # Analizo la terna 
            SET XlcCadena = 
                CASE # TERNA 
                    WHEN XlnTerna = 1 THEN XlcCadena 
                    WHEN XlnTerna = 2 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena,  'MIL ') 
                    WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0 THEN CONCAT(XlcCadena, 'MILLON ') 
                    WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND NOT (XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0) THEN CONCAT(XlcCadena, 'MILLONES ') 
                    WHEN XlnTerna = 4 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena, 'MIL MILLONES ') 
                    ELSE '' 
                END; #TERNA 

            #Armo el retorno terna a terna 
            SET XlcRetorno = CONCAT(XlcCadena, XlcRetorno); 
            SET XlnTerna = XlnTerna + 1; 
        END WHILE; # WHILE 

        IF XlnTerna = 1 THEN SET XlcRetorno = 'CERO'; END IF; 

    SET Xresultado = CONCAT(RTRIM(XlcRetorno), ' CON ', LTRIM(XlnFraccion), '/100 ', XMoneda); 

    RETURN Xresultado; 

END  

1 个答案:

答案 0 :(得分:1)

您尚未使用DELIMITER来指示引擎忽略默认语句终止符分号;

创建任何存储过程时,必须使用自定义DELIMITER

Delimiter //

create function

-- include your function body here

end;
//

delimiter ;