mysql存储过程和函数的操作

MySQL在5.0版本开始有存储过程功能;

存储过程和函数是事先经过编译并存储在数据库中的一条SQL语句集合;

存储过程和函数的区别:函数必须有返回值,存储过程则没有;

1、1 创建存储过程语法形式

delimiter $$

create procedure procedure_name ([procedure_paramter,]) [characteristic...]

routine_body

$$

delimter ;

注:procedure_paramter为参数,可有可无,形式为: in/out/inout paramter_name type

routine_body为sql语句,以begin...end标识sql语句开始和结束

暂时以$$为语句结束分隔符

1、2创建函数语法形式

create function function_name ([function_paramter,]) [characteristic...]

routine_body

注:function_paramter的语法形式:paramter_name type

使用存储过程的好处:简单、安全、高性能;缺点:可能没有创建存储过程的安全访问权限;

1、执行存储过程

存储过程的执行称为调用,语句为:call,格式为:call procedure_name (procedure_paramter,..);

不带参数: call procedure_name(); 执行创建的存储过程并显示返回结果

              不带参数的存储过程执行时,直接显示select语句结果

带参数:

         创建带传出参数的存储过程:create procedure proc_name(out proc_parameter1 int,out proc_parameter2 int)

         执行存储过程:call proc_name (@proc_parameter1,@proc_parameter2); 传出变量必须以@开头 

                             执行这条语句不显示任何数据,它返回指定的变量,运行结果为1 rows affected

                            select @proc_parameter1,@proc_parameter2;执行这条语句则显示返回结果

          call...和select...语句配套使用

所以,执行存储过程时,既可以显示结果,也可以不显示。

存储过程体select语句的结果保存到相应的变量,用into 关键字。

例:delimiter $$

     create procedure proc_name(in emnpo int,out sum_sal int)

     begin

     select sum(sal) from table where table.emnpo=emnpo into sum_sal;

     end $$

     delimiter;

     

    call proc_name(3,@sum_sal);

    select @sum_sal;

2、创建存储过程:同1.1

3、删除存储过程:

语句格式:drop procedure procedure_name;

只给出存储过程名,不需要加()

4、检查存储过程:

show procedure status;

此语句查询包括详细信息的全部存储过程列表

原文地址:https://www.cnblogs.com/yaofang/p/5486055.html