您好,欢迎访问一九零五行业门户网

MySQL5的存储过程详细实例

本文章来介绍一下关于mysql5的新特性存储过程了,在mysql5之前是没有存储过程这一说的,下面我们来看看mysql5存储过程的用法。
mysql 5.0
新特性教程是为需要了解5.0版本新特性的mysql老用户而写的。简单的来说是介绍了“存储过程、触发器、视图、信息架构视图
格式:
create procedure 过程名 ([过程参数[,...]])
[特性 ...] 过程体
create function 函数名 ([函数参数[,...]])
returns 返回类型
[特性 ...] 函数体
过程参数:
[ in | out | inout ] 参数名 参数类型
函数参数:
参数名 参数类型
返回类型:
有效的mysql数据类型即可
特性:
language sql
| [not] deterministic
| { contains sql | no sql | reads sql data | modifies sql data }
| sql security { definer | invoker }
| comment 'string'
过程体/函数体:格式如下:
begin
有效的sql语句
end
实例
delimiter $$
drop procedure if exists `sptest` $$
create procedure `sptest`(p_title varchar(200), p_description text)
deterministic
begin
insert into category (title, description)
values (p_title, p_description);
end $$
delimiter ;
其中delimiter是用来决定sql分隔符号的,在写stored procedure前,要先把预设的分号换掉,写完 stored procedure 的 routine_body 后,再回复成预设的分号。
--删除
drop procedure if exists up_common_select
--创建
create  procedure `up_common_select`(
 in t_name varchar(50)
)
begin
 declare v_sql varchar(500);
 set v_sql= concat('select * from ',t_name);
 select v_sql;
 --
--注意:prepare(预处理)execute stmt using @var,只能跟@,declare和传入的变量不行!!!
 set @v_sql=v_sql;
 prepare stmt from @v_sql;
 execute stmt ;
 deallocate prepare stmt;
end;
--调用
call up_common_select('admin_authority');
#############################################
#注意事项
###########
1  mysql5.0.13之后支持在存储过程中调用prepare
2, prepare stmt from 'select * from ?';  (错)
    mysql5.0.24,prepare尚不支持 表名做变量!
    解决方案:用 contat()函数,组合字符串
3. execute stmt [using @var,@var2]
     必须是@var形式的变量,传入的参数变量,declare变量不行
4.  deallocate prepare stmt; 显式的释放prepare,如果不释放,mysql会释放,!
其它类似信息

推荐信息