码迷,mamicode.com
首页 > 其他好文 > 详细

存储过程

时间:2015-03-14 21:35:31      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

 

变量variable:所有mysql变量都必须以@开头.


存储过程
创建语法
create PROCEDURE 存储过程名()
BEGIN
select * from `user` where `name`=‘张三‘; --执行语句.
END

调用语法
call 存储过程名()

删除存储过程
drop PROCEDURE proce_select_name -- 注意后面是不带()
删除存储过程时,如果存储过程不存在就会出错,如果要想不出错要这样写:
drop PROCEDURE if EXISTS proce_select_name

 

-- 创建带参数的语法。
-- 带输入参数

create procedure 存储过程名(
    out 参数名1 DECIMAL(8,2),
    out 参数名2 VARCHAR(50)
)

BEGIN
    select AVG(age) into 参数名1  from `user` ;
  select `name`  from `user`  where `id`=3 into 参数名2; 
END


CALL 存储过程名(@变量1,@变量2);
select @变量1,@变量2;

-- 带输入输出参数
create PROCEDURE 存储过程名(
IN 转入参数名1 int ,
OUT 参数名2 VARCHAR(50)
)

BEGIN
select hobby from `user`
where id = 转入参数名1
into 参数名2;
END

drop PROCEDURE if EXISTS 存储过程名

CALL 存储过程名(转入参数,@输出变量);
select @输出变量


关键字解释:
IN 把外界的值传递给存储过程使用 的变量
OUT 定义存储过的传出变量
INOUT 为存储过程定义传入传出变量 .
INTO 存储过程的结果保存到相应的变量.


--示例: 创建带参数的。
-- 带输入参数

create procedure proce_select_name(
    out temp_age DECIMAL(8,2),
    out temp_name VARCHAR(50)
)

BEGIN
    select AVG(age) into temp_age  from `user` ;
  select `name`  from `user`  where `id`=3 into temp_name; 
END


CALL proce_select_name(@age,@name);
select @age,@name;

-- 带输入输出参数
create PROCEDURE proce_get_hobby_for_id(
    IN set_id int ,
    OUT get_hobby VARCHAR(50)
)

BEGIN
    select hobby from `user` 
    where  id =  set_id 
    into get_hobby;
END

drop PROCEDURE if EXISTS proce_get_hobby_for_id

CALL proce_get_hobby_for_id(1,@hobby);
select @hobby


-- 智能存储过程。。

create procedure proce_age_for_id
(
    IN set_id int,
    IN is_bool BOOLEAN,
    OUT    get_age INT
)

BEGIN
    DECLARE temp_age int; -- 用DECLARE关键字定义了一个int类型的temp_age局部变量
    DECLARE extra_age int DEFAULT 5;
    
    select age from `user` where id = set_id INTO temp_age;
    
    --if 检查is_bool是否为真,如果为真就执行.  if 语句还支持elseif ,else字句. 
    if is_bool  THEN
        select temp_age + extra_age INTO temp_age;
    end if;

    select temp_age INTO get_age;
    
END;

CALL proce_age_for_id(3,0,@scal_age);
select @scal_age;

-- 查询存储过程创建语句
show create procedure 存储过程名

建立示例表语句

CREATE TABLE `user` (
  
`id` int(11) NOT NULL AUTO_INCREMENT,
 
 `name` varchar(50) DEFAULT NULL,
  
`age` int(3
) 
DEFAULT NULL,
  `hobby` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk

 

存储过程

标签:

原文地址:http://www.cnblogs.com/longhs/p/4338218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!