免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 841 | 回复: 0
打印 上一主题 下一主题

Mysql存储过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:53 |只看该作者 |倒序浏览

存储过程是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

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP