Mysql存储函数的未知错误RETURN CAST(finNumber AS DECIMAL(12,2))AS final;

时间:2018-08-03 08:35:31

标签: mysql stored-functions

我的问题说明了一切。我有mysql存储的函数,返回类型为十进制12,2。

这是整个代码:

BEGIN
    -- The only edit is ony line number 9, 32 and 33

    DECLARE ctrNumber VARCHAR(50);
    DECLARE finNumber VARCHAR(50) DEFAULT '';
    DECLARE sChar VARCHAR(1); -- be aware varchar length is 1
    DECLARE inti INTEGER DEFAULT 1;

    SET @in_string = '.abc12';

    IF LENGTH(@in_string) > 0 THEN
        -- Loops from . to 1 (.abc1)
        WHILE(inti <= LENGTH(@in_string)) DO
            SET sChar = SUBSTRING(@in_string, inti, 1);

            -- Find if it contains the following array
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9,.'); 

            -- If returns true or 1 or 2 or positive number it means it contains
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            END IF;

            SET inti = inti + 1;
        END WHILE;
        -- end of loop from . to 1
        RETURN CAST(finNumber AS DECIMAL(12,2)) AS final;
    ELSE
        RETURN 0;
    END IF;    
END

该错误发生在以下部分: RETURN CAST(finNumber AS DECIMAL(12,2)) AS final;

finNumber是".12",我将其从字符串转换为十进制。

当我在存储过程中尝试使用SELECT CAST(finNumber AS DECIMAL(12,2)) AS final;时,它工作正常。

您可以使用十进制数12,2的返回类型复制我的整个代码,并将其粘贴到存储的函数/过程中。

我已经在MySQL和MariaDB中都尝试过了,但事实并非如此。

这是错误:

  

以下查询失败:“ CREATE FUNCTION ExtractNumber()   返回DECIMAL(10,2)不确定SQL否安全定义   开始-唯一的编辑是第9、32和33行的DECLARE   ctrNumber VARCHAR(50); DECLARE finNumber VARCHAR(50)默认值'';   声明sChar VARCHAR(1); -注意varchar的长度为1 DECLARE inti   整数默认值1; SET @in_string ='.abc12';如果长度(@in_string)>   0 THEN-从循环。到1(.abc1)WHILE(inti <= LENGTH(@in_string))   设置sChar = SUBSTRING(@in_string,inti,1); -查找是否包含   以下数组SET ctrNumber = FIND_IN_SET(sChar,   '0,1,2,3,4,5,6,7,8,9 ,.'); -如果返回true或1或2或正   数字表示它包含IF ctrNumber> 0 THEN SET finNumber =   CONCAT(finNumber,sChar);万一; SET inti = inti + 1;结束时; -   从结束的循环。到1-原始代码:删除CAST和UNSIGNED-   UNSIGNED会删除所有特殊字符或字母-因为CAST会进行转换   数字转换为INT或UNSIGNED-返回CAST(finNumber AS UNSIGNED)AS   最后;以最终形式返回CAST(finNumber AS DECIMAL(12,2));否则返回   0;万一;结束“

     

MySQL说:#1064-您的SQL语法有误;检查   对应于您的MariaDB服务器版本的手册   在'AS final附近使用的语法;否则返回0;万一; END',位于第33行

0 个答案:

没有答案