MySQL 5.5.31 procedure 的语法规则细节

1.不能使用return;

2.Delimiter //(分割符声明,没声明默认为分号(;))

3.在procedure外没法用declare,声明变量直接用 @变量名;

4.要显示字符串,直接使用select语句;

Delimiter //
Drop procedure if exists Disp_Student;

create procedure Disp_Student(in nSNO char(20), out SUM_CREDIT numeric(5,0), out AVG_GRADE numeric(5,0))
begin
select *
from Students
where Students.SNO=nSNO;

select avg(Grade) into AVG_GRADE
from SC natural join Courses
where SNO=nSNO and Credit>3;

select sum(Credit) into SUM_CREDIT
from SC natural join Courses
where SNO=nSNO;
end
//


call Disp_Student('201130580497',@sum_credit ,@avg_grade );
select @avg_grade,@sum_credit;

5. 视图不被允许在procedure中进行修改(alter),即使是temporary table......=。=

6.在procedure中对变量直接进行赋值,用set语句。

delimiter //

drop procedure if exists CAL_GPA;
create procedure  CAL_GPA(in nSNO char(20), out GPA numeric(5,2) )

begin
declare SUM_CREDIT numeric(5,0);
declare SUM_GPC numeric(5,0);

create temporary table if not exists temp(CREDIT numeric(5,2), Grade numeric(5,2),GPC numeric(5,2));


insert into temp
select Credit,Grade,NULL
from SC natural join Courses
where SNO=nSNO ;

select sum(Credit) into SUM_CREDIT
from temp;


update temp
set GPC=4*Credit
where Grade>=85;

update  temp
set GPC=3*Credit
where Grade>=75 and Grade<85;

update  temp
set GPC=2*Credit
where Grade>=60 and Grade<75;

update  temp
set GPC=1*Credit
where Grade<60;

select sum(GPC) into SUM_GPC
from temp;

set GPA=SUM_GPC/SUM_CREDIT;


drop temporary table if exists temp;
end
//

call CAL_GPA('201130580497',@GPA);
select @GPA;
View Code

 7.查看procedure使用

show procedure status;

 

 

 

posted on 2013-05-20 20:47  alex_wood  阅读(318)  评论(0编辑  收藏  举报