一,存储过程的定义与优点

1.定义:

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

2,.优点

  1. 1、能完成较复杂的判断和运算<br /> 2、可编程行强,灵活<br /> 3SQL编程的代码可重复使用<br /> 4、执行的速度相对快一些<br /> 5、减少网络之间的数据传输,节省开销

二,存储过程的语法

1,如何创建存储过程

CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …]
begin 过程体
end

调用存储过程:
call 过程名[(传参)];


2,参数的个数

存储过程的参数可以有0个(无参)或者多个(有参)


3,参数类型详解:

IN,OUT,INOUT,下面分别介绍这个三种类型:

3.1存储过程的传出参数IN

说明:
(1)传入参数:类型为in,表示该参数的值必须在调用存储过程时指定,如果不显示指定为in,那么默认就是in类型。
(2)、IN类型参数一般只用于传入,在调用过程中一般不作为修改和返回
(3)、如果调用存储过程中需要修改和返回值,可以使用OUT类型参数
例子:
需求:编写存储过程,传入id,根据id返回name

  1. #创建存储过程
  2. DELIMITER +$$(修饰结束符号)
  3. create procedure test4(userId int)
  4. begin
  5. declare username varchar(32) default '';
  6. declare ordercount int default 0;
  7. select name into username from users where id=userId;
  8. select username;
  9. end $$

使用语句 call test4(1); 显示结果如下
image.png

3.2 存储过程的传出参数out

参数说明:

  1. 传出参数:在调用存储过程中,可以改变其值,并可返回
  2. out是传出参数,不能用于传入参数值
  3. 调用存储过程时,out参数也需要指定,但必须是变量,不能是常量;
  4. 如果既需要传入,同时又需要传出,则可以使用INOUT类型参数

    例子:
    需求:调用存储过程时,传入userId返回该用户的name

    1. #创建存储过程
    2. DELIMITER +$$(修饰结束符号)
    3. create procedure test5(in userId int,out username varchar(32))
    4. begin
    5. select name into username from users where id=userId;
    6. end$$

    调用此存储过程 然后显示结果如下
    image.png

    3.3存储过程的可变参数INOUT

    参数说明:

  5. 可变变量INOUT:调用时可传入值,在调用过程中,可修改其值,同时也可返回值;

  6. INOUT参数集合了IN和OUT类型的参数功能;
  7. INOUT调用时传入的是变量,而不是常量;

例子:
需求:调用存储过程时,传入userId返回该用户的name

  1. #创建存储过程
  2. DELIMITER +$$(修饰结束符号)
  3. create procedure test6(inout userId int,inout username varchar(32))
  4. begin
  5. set userId=2;
  6. set username='';
  7. select id,name into userId,username from users where id=userId;
  8. end$$

调用及运行结果如下图
image.png


注意:
①如果过程没有参数,也必须在过程名后面写上小括号
例:CREATE PROCEDURE sp_name ([proc_parameter[,…]]) ……
②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理
建议:
① 输入值使用in参数;
② 返回值使用out参数;
③ inout参数就尽量的少用。