存储过程和函数
1、概述
事先经过编译,存储在数据库中的一段SQL语句的集合。调用存储过程和函数可以简化应用开发人员的很多工作。减少数据在数据库和应用服务器之间的传输。对于提高数据的处理的效率是有好处的。
# 函数 有返回值
# 过程 没有返回值
2、创建存储过程
create procedure procedure_name()
begin
--- SQL 语句
end ;
结束符。 example:delimiter &
>> delimiter >>
3、调用存储过程
call pro_name() >>
4、查询存储过程
查询过程列表
select name from mysql.proc where db= 'database_name' >>
查询情况
show procedure status >>
查询定义
show create procedure pro_name >>
↑ 可以加 \G
5、删除存储过程
drop procedure pro_name >>
6、语句
1、变量
* declare
通过declare可以定义一个局部变量。作用域begin -- end

* set
为变量赋值

还可以使用select ... into.....赋值

2、if 条件判断
if
seif
end if

3、传递参数
in
out

4、case
case
when 条件
then 结果
5、while
满足条件就继续

6、repeat
满足条件退出循环
REPEAT
statement_list
unitl search_condition # 退出条件
END REPEAT

如果这样运行是会报错的,因为循环是不接分号的。

7、loop
[ begin_label ]: LOOP
statement_list
END LOOP
要想退出就得借助leave语句

8、游标/光标
1、声明游标
declare cursor_name cursor for select_statement;
2、open 游标
open cursor_name;
3、fetch 游标
fetch cursor_name into var_name [, var_name ]
4、关闭游标
close cursor_name;


7、 存储函数
create function function_name(param type ...)
returns type # 声明一个返回值的类型
begin
...
end;
存储函数有返回值
存储过程没有返回值,但是任然可以返回。in out

其实我创建的时候是报错了,原因是:
这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的 deterministic
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据 reads sql data
4 MODIFIES SQL DATA 要修改数据 modifies sql data
5 CONTAINS SQL 包含了SQL语句 conditions sql
解决方法:1、我运行了这个命令,信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求
SET GLOBAL log_bin_trust_function_creators = 1;
2、你也可以在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个,
CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()
DETERMINISTIC
BEGIN
#Routine body goes here...
END;
调用函数的方法:之前调用procedure的时候用的是call(),如果你继续使用,系统就会认为你仍然调用的是存储过程,所以调用函数的话,直接使用select语句就可以了。

删除存储函数
drop function function_name;
本文深入探讨了数据库中存储过程和函数的概念、创建、调用、查询及删除方法。介绍了如何利用存储过程和函数简化应用开发,提升数据处理效率。同时,详细讲解了变量、条件判断、循环等控制语句,以及游标、参数传递等高级特性。

被折叠的 条评论
为什么被折叠?



