mysql存储函数返回cast(finnumber作为decimal(12,2))作为final的未知错误;

l7mqbcuq  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(326)

我的问题说明了一切。我有一个mysql存储函数,返回类型为decimal 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; 芬兰号是 ".12" 我把它从字符串转换成十进制。
当我在存储过程中使用 SELECT CAST(finNumber AS DECIMAL(12,2)) AS final; 很好用。
您可以用decimal 12,2的返回类型复制我的整个代码,并将其粘贴到存储函数/过程中。
我在mysql和mariadb中都试过,但看起来不是这样。
这是错误:
以下查询失败:“create function ExtractNumber ()返回decimal(10,2)not deterministic no sql security definer begin——唯一的编辑是ony行号9、32和33 declare ctrnumber varchar(50);声明finnumber varchar(50)默认值“”;声明schar varchar(1);--注意varchar length是1,declare inti integer default是1;设置@in_string='.12';如果长度(@in_string)>0,则--从循环。设置为1(.1),而(inti<=length(@in_string))则设置schar=substring(@in_string,inti,1);--find如果它包含以下数组集ctrnumber=find_in_set(schar,'0,1,2,3,4,5,6,7,8,9,.');--如果返回true或1或2或正数,则表示它包含ctrnumber>0,然后设置finnumber=concat(finnumber,schar);结束if;设置inti=inti+1;结束时;——来自的循环结束。to 1—原始代码:remove cast和unsigned—unsigned删除所有特殊字符或字母—因为cast将数字转换为int或unsigned—返回cast(finnumber为unsigned)作为final;返回cast(finnumber作为十进制(12,2))作为final;否则返回0;结束if;“结束”
mysql说:#1064-你的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以获得使用near'作为final的正确语法;否则返回0;结束if;在第33行结束

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题