1、什么是存储过程?
存储过程简单来说,就是为以后的使用而保存的一条或多条SQL语句的集合。可将其视为批文件,虽然它们的作用
不仅限于批处理。
2、创建存储过程
第一个存储过程
delimiter //
create procedure test_name()
begin
select count(*) from table_name;
end
//
call test_name();//调用存储过程
解释:delimiter // 将语句的结束符号从分号;临时改为两个//(可以是自定义)
create procedure 关键字,用来创建一个存储过程。
begin 关键字,存储过程开始关键字
end 关键字,存储过程结束关键字
注意:
1、此存储过程没有参数,但后跟的()仍然需要。
2、如果不自定义结束符号//,语句会报错。因为默认语句为分号;当运行到table_name;代码会截断。
第二个存储过程
delimiter // #将语句的结束符号从分号;临时改为两个//
create procedure delete_matches(in p_playerno interger)
begin
delete from table_name where playerno=p_playerno;
end //
delimiter;#将语句的结束符号恢复为分号
call delete_matches(57);//调用存储过程
传入一个字面量参数,指定要删除的球员
参数的指定形式为:
[in|out|inout] <参数名> <参数类型> [,[in|out|inout] <参数名> <参数类型>]
IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
第三个存储过程(in 输入参数)
mysql> delimiter $$
mysql> create procedure in_param(in p_in int)
-> begin
-> select p_in;//1
-> set p_in=2;//2
-> select P_in;//1
-> end$$
mysql> delimiter ;
mysql> set @p_in=1;
mysql> call in_param(@p_in);
@p_in 为传入的一个变量
第四个存储过程(out输出参数)
mysql> delimiter //
mysql> create procedure out_param(out p_out int)
-> begin
-> select p_out;#NULL 因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null
-> set p_out=2;#2
-> select p_out;#2
-> end
-> //
mysql> delimiter ;
mysql> set @p_out=1;
mysql> call out_param(@p_out);
第五个存储过程(inout输入输出参数)
mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)
-> begin
-> select p_inout;#1
-> set p_inout=2;#2
-> select p_inout;#2调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量
-> end
-> $$
mysql> delimiter ;
mysql> set @p_inout=1;
mysql> call inout_param(@p_inout);
总结:
确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理。
建议:
输入值使用in参数。
返回值使用out参数。
inout参数就尽量的少用。