在mysql 中创建函数,输入参数n,计算1到 n的n个数的阶乘之和。

老是创建错误,没看懂提示错误,求解答错误原因和正确的修改方案。

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/797812
  • 你也可以参考下这篇文章:mysql查询时间在创建时间N天之内的数据
  • 除此之外, 这篇博客: MySQL模糊查询中的几种类型中的 _含有下划线的:通常表示用来限制模糊查询的字符个数,除开要查询的字符一个下划线就是匹配一个字符两个下划线就是两个字符n个字符就是匹配到n个字符 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • --1.下划线开始 查询出来的结果就是含有两个字符并且是以学结尾的例如下面的这条语句
    select name from tb_category where name LIKE "_学"
    --查询结果如下:
    --文学
    --哲学
    --国学
    
    --2.下划线结尾 查询出来的结果就是含有两个字符并且是以学开头的例如下面的这条语句
    select name from tb_category where name LIKE "学_"
    
    --查询结果如下:
    --学神
    --学王
    --学圣
    
    --3.下划线开头和结尾 查询出来的结果就是含有三个字符并且是以学在中间的例如下面的这条语句
    select name from tb_category where name LIKE "_学_"
    
    --查询结果如下:
    --爱学习
    --大学师
    
    --4.多个下划线查询出来的结果就是含有多个字符例如下面的这条语句是学后面两个下划线的
    select name from tb_category where name LIKE "_学__"
    
    --查询结果如下:
    --大学老师
    
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    在MySQL中创建阶乘和函数的正确方式是使用自定义函数来实现,实现方式如下:

    1.创建一个自定义函数,名为factorial_sum,输入参数为正整数n。该函数的作用是返回1到n中n个数的阶乘之和。

    CREATE FUNCTION factorial_sum(n INT) RETURNS INT
    BEGIN
        DECLARE i INT DEFAULT 1;
        DECLARE result INT DEFAULT 0;
    
        WHILE(i <= n) DO
            SET result = result + factorial(i);
            SET i = i + 1;
        END WHILE;
    
        RETURN result;
    END
    

    2.在自定义函数中再创建一个函数,名为factorial,用于计算阶乘。该函数的输入参数为正整数k,返回值为k的阶乘。代码如下:

    CREATE FUNCTION factorial(k INT) RETURNS INT
    BEGIN
        DECLARE i INT DEFAULT 1;
        DECLARE result INT DEFAULT 1;
    
        WHILE(i <= k) DO
            SET result = result * i;
            SET i = i + 1;
        END WHILE;
    
        RETURN result;
    END
    

    3.测试自定义函数,使用SELECT语句调用该函数并传入参数,即可输出结果。例如,调用factorial_sum(5):

    SELECT factorial_sum(5);
    

    输出结果为153。

    错误提示含义:

    在创建函数时,可能出现如“ERROR 1418 (HY000)-This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)”这类错误提示。

    这是因为MySQL的安全限制所导致的,MySQL默认不允许在有二进制日志记录的情况下创建不确定性的函数(没有指定DETERMINISTIC、NO SQL或READS SQL DATA)。要解决这个问题,有两种方法:

    方法一: 修改MySQL的配置文件my.cnf,在[mysqld]下添加行记录:log_bin_trust_function_creators=1。然后重新启动MySQL服务。

    方法二: 在创建函数时,使用DETERMINISTIC关键字,表示该函数是确定性函数,是不会对数据做出改变的。例如:

    CREATE FUNCTION factorial_sum(n INT) RETURNS INT 
    DETERMINISTIC
    BEGIN
        ......
    END
    

https://blog.csdn.net/jlq_diligence/article/details/100023236

创建 MySQL 函数计算阶乘之和,可以按照以下步骤进行:

1.首先,需要创建一个函数,输入参数为 n。例如,可以使用如下的语句来创建函数:

CREATE FUNCTION factorial_sum(n INT) RETURNS INT
BEGIN
    -- 函数体
END;

2.在函数体中,使用循环和递归的方式计算 1 到 n 的阶乘之和,并返回结果。具体来说,可以在函数体内部定义一个变量 sum,然后使用循环计算每个数的阶乘并加到 sum 中。例如,可以使用如下的代码:

DECLARE i INT DEFAULT 1;
DECLARE fact INT DEFAULT 1;
DECLARE sum INT DEFAULT 0;

WHILE (i <= n) DO
    SET fact = 1;
    DECLARE j INT DEFAULT 1;
    WHILE (j <= i) DO
        SET fact = fact * j;
        SET j = j + 1;
    END WHILE;
    SET sum = sum + fact;
    SET i = i + 1;
END WHILE;

RETURN sum;

3.最后,在函数体外部添加结束符号 END,完成函数的定义。
如果您遇到了创建函数错误的问题,请检查以下几个方面:

1.是否使用了正确的语法格式,包括关键字大小写和分号等。

2.是否在函数体中使用了合法的语句和表达式,例如是否正确使用了循环、条件判断、函数调用等等。

3.是否正确定义了变量和参数,包括数据类型和默认值等。

4.是否存在语法错误或逻辑错误,例如拼写错误、缺少结束符号、未定义变量等等。

应该根据 MySQL 的错误提示来定位具体的错误原因,然后对照语法规范进行修改。同时,也可以参考 MySQL 的官方文档或者其他相关教程,进一步学习和掌握 MySQL 函数的创建和使用方法。