- 存储程序可以分为存储过程和存储函数。
- 简单来说,存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理。
- 使用call语句来调用存储过程,只能用输出变量返回值。
- 函数可以从语句外调用(即通过引用函数名),也能返回标量值。
- 存储过程可以调用其他存储过程
MySQL中存储过程和存储函数的区别:
- 在本质上他们都是存储程序。
- 存储函数只能通过return 语句返回 单个值 或者 表对象。
- 而存储过程中不能执行return语句,但是可以通过out参数 返回多个值
- 存储函数的限制较多,不能用临时表,必须用表变量等等。
- 而存储过程的限制相对就比较少。
- 存储函数可以嵌入在SQL语句中使用,可以在色狼了传统语句中作为查询语句中的一部分调用。
- 而存储过程一般是作为一个独立的部分来执行。
创建存储过程
create procedure 存储过程的名称 ([指定存储过程的参数列表])
[指定存储过程的特性]
SQL代码内容(可用 begin和 end来表示代码的开始于结束)
# 即语法形式如下
create procedure 存储过程的名称 ([指定存储过程的参数列表])
[指定存储过程的特性]
begin
sql语句
end;
- 存储过程的参数列表的形式如下:
[ in | out | inout ] 参数名称 参数类型
- 其中in表示输入参数,out表示输出参数;
- inout表示既可以输入也可以输出。
- 示例:
- 创建一个查看fruits表的存储过程:
# ()代表无参 create procedure proc() begin select * from fruits; end;
- 代码优化,添加delimiter语句
mysql> delimiter // mysql> create procedure proc() begin select * from fruits; end // mysql> delimiter ;
- 使用delimiter 语法的原因:
- 因为mysql默认结束符是“;”,为了避免与存储过程中的SQL语句相冲突,需要使用delimiter语法改变存储过程的结束符,最后在恢复默认的结束符。
delimiter语法介绍:
- “delimiter //” 语句的作用是将mysql的结束符设置为//
- “delimiter ; ” 语句将mysql的结束符恢复为默认值 ;
- 其中delimiter 也可以指定其他符号作为结束符。
- 但是:应该避免使用反斜杠(\),因为反斜杠是mysql中的转义字符。
创建存储函数
create function 存储函数名称 ([存储函数的参数列表])
returns 返回数据的类型
[指定存储过程的特性]
return value(sql语句)
- 如果在存储函数中的return语句返回一个类型不同于函数的returns子句中指定类型的值,那么返回值将被强制为恰当的类型。比如,如果一个函数返回一个enum或者set值,但是return语句却返回了一个整数,对于set成员集的相应的enum成员,从函数返回的值是字符串。
- 存储过程的参数列表的指定参数为in、out、inout指对procedure是合法的。(function 中总是默认为 in参数)
- 示例:
- 创建一个存储函数,名称为Name,该函数返回select语句的查询结果,返回的数值类型为字符串类型:
create function Name () returns varchar(20) return (select name from students where id=5);
- 使用delimiter优化代码:
mysql> delimiter // mysql> create function Name () returns varchar(20) return (select name from students where id=5); // mysql> delimiter ;
调用存储过程
- 使用 call语句调用存储过程:
call 存储过程名称(存储过程的参数列表)
- 定义一个名为CountProc1的存储过程,然后调用这个存储过程:
# 定义存储过程 mysql> delimiter // mysql> create procedure CountProc1 (in sid int, out num int) begin select count(*) into num from students where id=sid; end // mysql> delimiter ; # 调用存储过程 mysql> call CountProc1 (101, @num);
调用存储函数
- 使用select调用存储函数:
select 存储函数名称 (存储函数参数列表);
查看存储过程和存储函数
1、查看存储过程和函数的状态
- 查看存储程序的特性,如 数据库、名字、类型、创建者、创建和修改日期等
- 基本语法格式如下:
show {procedure | function} status [like '存储名称'];
2、查看存储过程和函数的定义
- 查看存储程序的名称、具体的定义语句、还有数据库设置的一些信息。
- 基本语法格式如下:
show create {procedure | function} 存储名称;
3、查看存储过程和函数的信息
- 在MySQL中,存储过程和函数的信息存储在 information_schema 数据库下的 Routines 表中。
- 可以通过查询表的记录来查询存储过程或者函数的基本信息。
- 基本语法格式如下:
select * from infromation_schema.Routines
where routine_name='存储名称' [and routine_type='{function | procedure}'];
修改存储过程和函数
- 使用alter语法可以修改存储过程或函数的特性。
- 基本语法格式如下:
alter {function | procedure} 存储名称 [指定存储程序的特性];
删除存储过程和函数
- 基本语法格式如下:
drop {function | procedure} 存储名称;
问题:存储过程和存储函数 中的参数如何使用中文?
答案链接:https://blog.csdn.net/weixin_43622863/article/details/88104137