MySql-存储过程(理解为预处理多返回值函数)

来源:互联网 发布:淘宝助理5老版本下载 编辑:程序博客网 时间:2024/05/22 02:23
 存储过程(预处理)
  1. 1.语法结构:create [definer = {user | current_user}] 

procedure sp_name ([proc_parameter[,...]])  [characteristic...] routine_body

  proc_parameter: [in | out | inout] param_name type

in:该参数的值必须在调用存储过程时指定

       out:该参数的值可以被存储过程改变,并且可以返回

 inout:表示该参数在调用时指定,并且可以被改变和返回给调用者

过程体:由合法的sql语句构成,对于记录的增删改查及多表连接的sql语句,过程体如果超过两个语句,必须使用begin...end,复合语句内可以声明变量,循环,控制语句。
2. 
创建不带参数的存储过程:create procedure sp1() select version();  //创建一个名为sp1的存储过程 功能是返回版本
3. 
带有in类型参数的存储过程:create procedure removeUserById(in myId int unsigned)

 -> begin

    -> delete from users where id = myId;//标准语句 参数赋值 参数名字不能和字段名相同

    -> end

    -> //
4. 
调用存储过程:call sp_name([parameter[,...]])//若存储过程有参数,则()不能省略

   call sp_name[()]

示例:call sp1; call sp1();

    call removeUserById(3);
5. 
修改存储过程:alter procedure sp_name [characteristic...] comment ‘string’

| {contains sql | no sql | reads sql data | modifies sql data}

| sql security {definer | invoker}
6. 
删除存储过程:drop procedure [if exists] sp_name

示例:drop procedure removeUserById;

7.带有in和out类型参数的存储过程:

create procedure removeUserAndReturnUserNums(in p_id int unsigned,out userNums int unsigned)

    -> begin

    -> delete from test where id = p_id;

    -> select count(id) from test into userNums;//userNums代表接收表test的id总数

    -> end

    -> //

调用:call removeUserAndReturnUserNums(2,@nums); //@nums代表变量

查看:select @nums;

8.带有多个out类型参数的存储过程

create procedure removeUserByAgeAndReturnInfos(in p_age smallint unsigned,out deleteUsers smallint unsigned,out userCountssmallint unsigned)

 -> begin 

-> delete from users where age=p_age; 根据p_age参数删除表的记录

-> select row_count() into deleteUsers; 返回改变字段的数量并赋给deleteUsers

    -> select count(id) from users into userCounts; 返回id数量并赋给userCounts

    -> end

    -> //

in即为输入的变量    out是输出的变量

  row_count():返回改变的字段的数量

调用: call removeUserByAgeAndReturnInfos(20,@a,@b);

调用,删除age为20的所有记录,并返回改变字段的总数给a,返回剩余id数量给b。

0 0
原创粉丝点击