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')

相关推荐
这个DBA有点耶16 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风16 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio17 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲21 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋21 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子1 天前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T1 天前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡1 天前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata1 天前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__1 天前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构