mysql 存储过程

来源:互联网 发布:java输入异常处理 编辑:程序博客网 时间:2024/05/29 07:37

MySQL存储过程创建的格式:

  1. create procedure 存储过程名字()   
  2. (   
  3. [in|out|inout] 参数 datatype   
  4. )   
  5. begin   
  6. MySQL 语句;   
  7. end; 


create procedure pr_add   
(   
a int,   
b int   
)   
begin   
declare c int;   
if a is null then   
set a = 0;   
end if;   
if b is null then   
set b = 0;   
end if;   
set c = a + b;   
select c as sum;
end;

exec pr_add(10,20);

输出结果是:30


数据库表

id   name   age

1    XYZ          20

2     234          14


// 输入参数

drop  procedure if exists select_byid ;


CREATE procedure select_byid
(
 in maxVal int
)
begin
 SELECT * from user u where u.id = maxVal;
end;

执行   call select_byid(1);

  结果

1    XYZ          20


select @id;

执行结果还是1,输入


//  输出参数



一.创建存储过程
create procedure sp_name()
begin
.........
end

二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程
1.基本语法:
drop procedure sp_name//

2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.其他常用命令

1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2.show create procedure sp_name
显示某一个mysql存储过程的详细信息

mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])

IN 输入参数
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数
该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数
调用时指定,并且可被改变和返回

IN参数例子:
CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
BEGIN
SELECT p_in; --查询输入参数
SET p_in=2; --修改
select p_in;--查看修改后的值
END;

执行结果:
mysql> set @p_in=1
mysql> call sp_demo_in_parameter(@p_in)

1

2

mysql> select @p_in;

1

 说明 :输入参数的值在过程中更改了,查找时不会改变原来的值


以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

OUT参数例子
创建:
mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
BEGIN
SELECT p_out;/*查看输出参数*/
SET p_out=2;/*修改参数值*/
SELECT p_out;/*看看有否变化*/
END;

执行结果:
mysql> SET @p_out=1
mysql> CALL sp_demo_out_parameter(@p_out)

无值

2

mysql> SELECT @p_out;
2

 说明 :输出参数的值在过程中更改了,查找时不会改变原来的值


INOUT参数例子:
mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;

执行结果:
set @p_inout=1
call sp_demo_inout_parameter(@p_inout) //
1

2

select @p_inout;
3

说明 :输入输出参数的值在过程中更改了,查找时不会改变原来的值