mysql 编写存储过程

先看例子:

1、delimiter $$
2、drop procedure if exists`test_procedure` $$
3、create procedure test_procedure(IN puser_id VARCHAR(30),IN pitem_id varchar(45),OUT result INT)
4、begin

5、select id into result from train_tbl where user_id = puser_id;
6、set result=10;
7、end $$
8、delimiter ;

详解:

1、首先使用delimiter将结束符从“;”变为$$ ,这样就不会在过程或者函数中的“;”被mysql解释成语句的结束而提示错误。

在存储过程或函数创建完毕后,使用“delimiter”再把结束符该为“;”。

 

2、演示了存储过程的删除,通过存储过程的名称来删除一个存储过程 

 

3、创建一个存储过程,设定存储过程的名字为 “test_procedure”,设置存储过程的参数,及其参数类型。存储过程的参数可以是IN、OUT、INOUT类型,函数的参数只能是IN类型。

IN OUT INOUT的区别:详情参见http://www.blogjava.net/nonels/archive/2009/04/22/233324.html

IN类型类似于值传递,MYSQL存储过程内部可能会修改此参数,但是对于IN类型的参数的修改对于调用者来说是不可见的。

例如:

drop procedure if exists pr_param_in;

create procedure pr_param_in
(
   in id int -- in 类型的 MySQL 存储过程参数
)
begin
   if (id is not null) then
      set id = id + 1;
   end if;

   select id as id_inner;
end;

set @id = 10;

call pr_param_in(@id);

select @id as id_out;

 

mysql> call pr_param_in(@id);
+----------+
| id_inner |
+----------+
|       11 |
+----------+

mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 10     |
+--------+

OUT类型MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。
INOUT MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

4、begin 和end 详见:http://dev.mysql.com/doc/refman/5.1/en/begin-end.html
BEGIN END被用来写并列复合句,比如存储过程。一个并列复合句可以包括多条语句,0条也是合法的。
BEGIN……END块可以内嵌。
语句之间用定界符(delimiter)“;”分隔。
5、自己的查询语句。

参考资料:

http://www.blogjava.net/nonels/archive/2009/04/22/233324.html

(存储过程没有返回值,函数必须有返回值)

 

posted @ 2015-04-30 19:47  Earendil  阅读(1752)  评论(0编辑  收藏  举报