首页 > 数据库技术 > 详细

MySQL-存储过程及函数

时间:2019-10-07 12:22:26      阅读:93      评论:0      收藏:0      [点我收藏+]

一、语法简介

文档:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

技术分享图片

1)create procedure用来创建存储过程,create function用来创建函数

2)函数与存储过程最大的区别就是函数调用有返回值调用存储过程用call语句,而调用函数就直接引用函数名+参数即可

3)Definer和sql security子句指定安全环境

Definder是MySQL的特殊的访问控制手段,当数据库当前没有这个用户权限时,执行存储过程可能会报错

sql secuirty的值决定了调用存储过程的方式,取值 :definer(默认)或者invoker

  • definer:在执行存储过程前验证definer对应的用户如:cdq@127.0.0.1是否存在,以及是否具有执行存储过程的权限,若没有则报错
  • invoker:在执行存储过程时判断inovker即调用该存储过程的用户是否有相应权限,若没有则报错


4)IN,OUT,INOUT三个参数前的关键词只适用于存储过程,对函数而言所有的参数默认都是输入参数

  • IN输入参数用于把数值传入到存储过程中;
  • OUT输出参数将数值传递到调用者,初始值是NULL;
  • INOUT输入输出参数把数据传入到存储过程,在存储过程中修改之后再传递到调用者

5)Rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句,通过begin…end将这多个SQL语句包含在一起,MySQL存储过程和函数中也可以包含类似create和drop等DDL语句

6)Comment子句用来写入对存储过程和函数的注释

7)Language子句用来表示此存储过程和函数的创建语言

8)存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic

2.1、创建简单的存储过程

#创建简单的存储过程:
#Delimiter命令是改变语句的结束符,MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结
delimiter //   
create procedure simpleproc(in param1 int,out param2 int)
begin
select count(*) into param2 from Students where sid>param1;
end
//
delimiter ;

#调用存储过程:
call simpleproc(1,@a);
select @a;

2.2、创建简单的函数

#创建简单的函数过程:
delimiter //
create function hello(s char(20))
returns char(50)
return concat(‘hello  ‘,s);
//
delimiter ;

#调用
mysql> select hello(‘zhangsan‘);
+-------------------+
| hello(‘zhangsan‘) |
+-------------------+
| hellozhangsan     |
+-------------------+

#----------------------------------------

delimiter //
create function simplefunc(param1 int)
returns int
begin
update Students set gender=1 where sid=param1;
select count(*) into @a from Students where sid>param1;
return @a;
end;
//
delimiter ;

MySQL-存储过程及函数

原文:https://www.cnblogs.com/hujinzhong/p/11629772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!