Mysql:参数--in、out、inout和自定义函数create function

#复习
delimiter //
create procedure p0001()
begin
    declare cname varchar(20);
    declare id varchar(10);
    declare num int;
    set cname='人民邮电出版社';
    set id=(select 出版社ID from 出版社信息 where 出版社名称=cname);
    set num=(select count(*) from 图书信息 where 出版社=id);
    select cname,id,num;
end //
delimiter ;
call p0001()

#参数格式: in(输入参数) |out(输出参数) | inout(同时具有in和out参数的特性)
#in参数
delimiter //
create procedure p0002(IN a varchar(20))  #输入参数a,将值通过a传入进去
begin
    declare cname varchar(20);
    declare id varchar(10);
    declare num int;
    set cname=a;
    set id=(select 出版社ID from 出版社信息 where 出版社名称=cname);
    set num=(select count(*) from 图书信息 where 出版社=id);
    select cname,id,num;
end //
delimiter ;
call p0002('高等教育出版社')  #调用,括号里的参数通过a传递进来
call p0002('清华大学出版社')  #通过in输入参数,可以通过call多次调用不同的数据

#out参数
delimiter //
create procedure p0003(IN a varchar(20),OUT b int)
begin
    declare cname varchar(20);
    declare id varchar(10);
    declare num int;
    set cname=a;
    set id=(select 出版社ID from 出版社信息 where 出版社名称=cname);
    set num=(select count(*) from 图书信息 where 出版社=id);
    set b=num;
end //
delimiter ;
call p0003('高等教育出版社',@b);    #out参数输出b的值
select @b;  #查询用户变量b

#inout参数
#输入出版社名称,输出这个出版社出版的最贵的图书名称

delimiter //
create procedure p0004(INOUT c varchar(20))  -- inout参数
begin
    declare cname varchar(20);
    declare id varchar(10);
    declare num int;
    set cname=c;
    set id=(select 出版社ID from 出版社信息 where 出版社名称=cname);
    set c=(select 图书名称 from 图书信息 where 价格=(select max(价格) from 图书信息 where 出版社=id));
end //
delimiter ;
set @num='高等教育出版社';  #使用inout需提前赋值
call p0004(@num);
select @num;

#练习:创建存储过程,求1-m的累加和delimiter $$
delimiter //
create procedure p0005(IN m int)
begin 
    declare i int;
    declare s int;
    set i=0;
    set s=0;
    while i<m do
        set i=i+1;
        set s=s+i;
    end while;
    select s;  #查询s的总值
end //
delimiter ;
call p0005(100);


#自定义函数
/*
delimiter //
create function <函数名称>(参数)
returns 自定义类型
deterministic begin
declare 参数名称 参数类型;
set 参数;
return 返回的参数;
end //
delimiter ;
select 函数名称(需要的参数);
*/
#例:
delimiter //
create function f1(a varchar(20))
returns varchar(30)
DETERMINISTIC begin
    declare tname varchar(30);
    set tname=(select 类型名称 from 商品类型 where 类型编号=a);
    return tname;
end //
delimiter ;
select f1('t030102')


 

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值