MySQL自定义函数

img


数据库链接:https://pan.baidu.com/s/1xgLgKKOrhUR6UmO3yIZTGw
提取码:gt5m

第一题:定义函数fun_sum()计算n!

img

create function fun_sum(n int)
returns int #返回值类型
begin
    declare i int default 1; #变量声明及初始化
    declare ans int default 1;
    while i<=n do
        set ans=ans*i;
        set i=i+1;
    end while;   /*注意:end while后面要加分号*/
    return ans;  -- 返回结果
end
select fun_sum(4)

img


第二题:

img

delimiter $$
CREATE FUNCTION fun_class ( s_no VARCHAR ( 20 ) ) 
RETURNS VARCHAR ( 20 ) 
READS SQL DATA 
BEGIN
    DECLARE    classname VARCHAR ( 20 );
    SELECT
        clname INTO classname 
    FROM
        student s
        LEFT JOIN class c ON s.classno = c.classno 
    WHERE
        sno = s_no;
    RETURN classname;
END;
$$
select fun_class('2018010101');

img


第三题:

img

delimiter $$
CREATE FUNCTION fun_compare (peacetime decimal(5,1),practice decimal(5,1)) 
RETURNS VARCHAR (20) 
READS SQL DATA 
BEGIN
    DECLARE    compareresult VARCHAR ( 20 );
  case when peacetime = practice then set compareresult = '比较均衡';
           when peacetime > practice then set compareresult = '加强实践';
             when peacetime < practice then set compareresult = '注重平时' ;
            end case ;
    RETURN compareresult;
END;
$$
select sno,peacetime,practice,fun_compare(peacetime,practice) from score

img

https://blog.csdn.net/WSS_ang/article/details/84996945

兄弟,我帮你写第一个,看着给奥

编写自定义函数
create procedure factorial(n int)
begin
    declare i int default 1; #变量声明及初始化
    declare ans int default 1;
    while i<=n do
        set ans=ans*i; -- set用于赋值,且set不可省略(两个减号加一个空格可开启注释)
        set i=i+1;
    end while; /*注意:end while后面要有分号*/
    select ans; -- 输出结果
end


执行语句
call factorial(5)

下面第一个答案是我搜索出来的,你改函数名就行:
http://t.csdn.cn/SFNnO


create procedure factorial(n int)
begin
    declare i int default 1; #变量声明及初始化
    declare ans int default 1;
    while i<=n do
        set ans=ans*i; -- set用于赋值,且set不可省略(两个减号加一个空格可开启注释)
        set i=i+1;
    end while; /*注意:end while后面要有分号*/
    select ans; -- 输出结果
end

剩下的题下午有空写给你

参考:
1 https://blog.csdn.net/liuxc324/article/details/117016928
2

create function func_class(id int) returns int
begin 
    declare n varchar(15);
    select name from class where cid=id into n;
    return n;
end;
select func_class(1);

3

CREATE FUNCTION func_compare(peacetime int, practice int) RETURNS VARCHAR(60)
BEGIN
    if peacetime> practice THEN
        return "加强实践";
    ELSEIF peacetime<practice THEN
        return "注重平时";
    ELSEIF peacetime=practice THEN
        return "比较均衡";
END IF;

编写自定义函数
create procedure factorial(n int)
begin
    declare i int default 1; #变量声明及初始化
    declare ans int default 1;
    while i<=n do
        set ans=ans*i; -- set用于赋值,且set不可省略(两个减号加一个空格可开启注释)
        set i=i+1;
    end while; /*注意:end while后面要有分号*/
    select ans; -- 输出结果
end
执行语句
call factorial(5)