Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7688494
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: Mysql/postgreSQL

2011-07-20 10:59:41

存储过程是MySQL5中最大创新,他们是由MySQL服务器直接存储和执行的SQL语句。

好处: 更快的速度、避免代码冗余、提高数据库的安全性、存储过程分为过程与函数

函数

    有返回值

    嵌套在SQL命令中使用

过程

    没返回值

    通过call调用

    可以传引用参数

    更多的SQL命令

 

声明变量

declare  var1,var2,datatype [default value];   :declare max int ;

 

变量赋值

    set var1=value1,var2=value2;

    select value1,value2, into var1,var2,

    select col from tbl where into var1

 

 

存储过的语法

create procedure prodedurename(var datatype,...)

begin

  //sql语句

end;

 

示例:

mysql> create procedure pro1(x int,y int)

    -> begin

    ->    select (x+y);

    -> end

 

调用 call pro1(2,3);

 

示例:

create procedure pro3(vid int)

    -> begin

    ->   declare sname varchar(20);

    ->   select name into sname  from person where id=vid;

    ->   select sname;

    -> end

 

示例:

create procedure pro4(vid int)

begin  

    declare sname varchar(10);  

    declare vcid int;  

    select name,*** into sname,vcid from person where id=vid;  

    select sname;

    select vcid;

end

 

 

create procedure pro7(vid int)

    -> begin

    ->   declare sname varchar(20);

    ->   select name from person where id=vid into sname;

    ->   select sname;

    -> end

 

 

存储过程参数三种模

1.in 输入

2.out 输出

3.in out 输入 输出

 

create procedure pro5(in x int,out y int,inout z int)

begin   

  select x,y,z;   

  set x=10;   

  set y=20;   

  set z=30; 

  select x,y,z;

end$$

 

create procedure pro6()

    -> begin

    -> declare s1 int;

    -> declare s2 int;

    -> declare s3 int;

    -> set s1=1;

    -> set s2=2;

    -> set s3=3;

    -> call pro5(s1,s2,s3);

    -> select s1,s2,s3;

    -> end$$

 

 

逻辑语句结构

选择

if  条件 then

   语句;

[else if 条件 then

            语句;]

        [else

            语句;]

end if ;

          

求最大值函数示例-:

    create function mymax(x int ,y int)

        returns int NO SQL

        begin

            declare max int ;

            set max = x;

             if y >max then

                set max = y;

            end if; 

            return max;

         end

 

求最大值函数示例2:

create procedure getmax(x int,y int)

    -> begin

    ->   if x>y then

    ->     select x;

    ->   else

    ->     select y;

    ->   end if;

    -> end$$

 

循环

loopname:loop

    语句;

end  loop loopname

 

求一至一百的和:

create procedure pro8()

    -> begin

    ->   declare sum,i int default 0;

    ->   sumloop:loop

    ->     set sum=sum+i;

    ->     if i>=100 then

    ->       leave sumloop;

    ->     end if;

    ->     set i=i+1;

    ->   end loop sumloop;

    ->   select sum;

    -> end$$

 

loop循环实例:

create function mypow(x int ,y int)

    returns int NO SQL

    begin

        declare temp,ret int  default 1;

        myloop:loop

            set ret = ret * x;

            if temp=y then

                leave myloop;

            end if;

            set temp =temp + 1;

        end loop myloop;

        return ret;

    end

 

阅读(1401) | 评论(0) | 转发(2) |
0

上一篇:Mysql 函数

下一篇:mysql 游标

给主人留下些什么吧!~~