mysql中自定义函数(有返回值) 和 存储过程(无返回值)

函数(有返回值)   和   存储过程(一定不能有返回值)的区别是:有无返回值!

查看所有存储过程和函数:

select name  from  mysql.proc where  db=‘stu’  and type=‘function’

select name  from  mysql.proc where  db=‘stu’  and type=‘procedure’

查看存储过程和定义的函数:

show create function  函数名;

show procedure  存储过程名;

查看存储过程和函数的信息:

show function  status   [like   '  '];

show procedure   status   [like   '  '];

删除 : drop  function/procedure  if exists   函数名;

一、函数

1.1   没有形参的函数

delimiter  $$          (将函数语句中的分隔符先由‘;’改为‘$$’)

create function  函数名( ) returns  返回值类型  (不是return)

begin

        函数体;               (函数语句集,使用@  定义变量)                              

        return  val;                                                                              (只能是一个值)    

end  $$

delimiter  ;                                                                                     (将函数语句中的分隔符再改回‘;’)

select   函数名( );                                                                         -------------------直接调用函数 即可得到返回值

变量定义:

用户变量(相当于全局变量),在函数外边定义;例如   set  @s=1;set表示赋值的意思。

局部变量在函数内部定义,例如  declare a[变量名] int[变量类型];

 局部变量的赋值方式有 2 种:set s=(select  语句)    或者      select 语句 into a[变量名];

查看变量:select  @s;(相当于print)

1.2 包含形参的函数

create function  函数名(形参名1   类型1,形参名2   类型2) returns  返回值类型 

函数体中使用的函数语句集,例如:

               select age from table91 where id= 形参名1          

调用:函数名(实参1,实参2);

二、存储过程(用的比函数多)

2.1 无参数存储过程

将函数中function改为procedure 即可,且无返回值!

调用:call 存储过程名();

2.2 有参数的存储过程

存储过程的参数分为三类(输入in;输出 out;即可输入有可以输出 inout)

in(只能进去):          外部传递给形参的值在存储过程内部可以直接使用;

                                      存储过程函数的内部对形参的修改不影响外部的实参值。

out(只能出来):        外部实参传递给形参的值在存储过程内部不可用;

                                     外部调用函数时 ,必须传入变量,传常量会报错!

                                     存储过程函数的内部对形参的修改会影响(修改)外部的实参值。

    例如 create procedure proc_name (out   age    int)

猜你喜欢

转载自blog.csdn.net/weixin_45037357/article/details/108294654