存储过程(procedure)
修改mysql结束符   delimiter name
procedure创建语法:
    create procedure procedureName();
    begin
        declare 声明变量
        sql语句
    end$
查看:procedure
    show procedure status;
调取:procedure
    call procedureName();
删除:drop procedure procedureName();
例1:带入变量
     create procedure p2()
     begin
     declare age int default 18;
     declare height int default 180;
     select concat('年龄',age,'身高',height);
     end$
例2:变量计算
      create procedure p3()
     begin
     declare age int default 18;
     set age:= age+20;
     select concat('20年后年龄',age);
     end$
例3:变量判断if
     create procedure p4()
     begin
     declare age int default 18;
     if age >=18 then
        select concat('成年');
     else
        select concat('未成');
     end if ;
     end$
例4:存储过程传参if
    /**
      存储过程的括号里,可以声明参数
      语法是[in/out/inout]参数名 参数类型
        in 传入
        out 输出
     **/
      create procedure p5(width int,height int)
      begin
      select concat('你的面积',width* height) as area;
      if width > height then
      select '你挺胖';
      elseif width < height then
      select '你挺瘦';
      else
      select '你是方的';
      end if;
      end$
 
例5:存储过程  while 
    create procedure p6()
    begin
     declare total int default 0;
     declare num int default 0;
    while num < 100 do
        set num :=num+1;
        set total := total+num;
    end while;
    select total;
    end $
例6:存储过程中的传参类型 in  out
    create procedure p7(in n int ,out total int)
    begin
       declare num int default 0;
       set total :=0;
    while num < n do
        set num = num+1;
        set total = total + num;
    end while
    end$
    调用 call p7(100,@q)$
    select @q$
例7:存储过程 inout
    create procedure p8(inout age int)
    begin
        set age :=age+20;
    end$
    首先声明变量  set @age=20;
    调用存储过程  call p8(@age);
    查询结果      select @age;
例8:when case
    create procedure p9()
    begin
        declare pos int default 0;
        set pos := floor(5*rand());
        case pos 
        when 1 then select '飞';
        when 2 then select '劫持';
        when 3 then select '打击';
        end case;
    end$
例9: repeat
    create procedure p10()
    begin
    declare total int default 0;
    declare i int default 0;
    repeat
        set i := i+1;
        set total := total + i;
        until i>= 100 end repeat;
    select total;
    end$
 
例10:游标cursor  for
    create procedure p11()
    begin
         declare r_gid int;
        declare r_num int;
        declare r_name char(20);
        declare getgoods cursor for select gid,num,name from goods;
         
        open getgoods;
            fetch getgoods into r_gid,r_num,r_name;
            select r_gid ,r_num,r_name;
            fetch getgoods into r_gid,r_num,r_name;
            select r_gid ,r_num,r_name;
        close getgoods;
    end$
例11:游标cursor  for
    create procedure p12()
    begin
         declare r_gid int;    --声明变量    
        declare r_num int;     --声明变量
        declare r_name char(20);    --声明变量
         
        declare cnt int default 0;
        declare i int default 0;
 
        declare getgoods cursor for select gid,num,name from goods;  --声明游标
        select count(*) into cnt from goods;    --查询总条数赋值给变量cnt
        open getgoods;  --打开游标
           repeat        
            set i := i+1;
            fetch getgoods into r_gid,r_num,r_name;
            select r_gid ,r_num,r_name;
           until i>=cnt end repeat;
        close getgoods;  --关闭游标
    end$
例12:游标cursor  for
    /*
    declare [exit|continue|undo] handler for NOT FOUND set you := 0;
    声明是使用continue 将会出现最后一条数据重复  因为conticue 触发不回立即停止  
    反之exit立即停止
    undo 触发撤销最后一条    mysql 还不支持    
    */
    create procedure p13()
    begin
         declare r_gid int;    
        declare r_num int;     
        declare r_name char(20);    
        declare you int default 1;    
 
        declare getgoods cursor for select gid,num,name from goods;  
        declare exit handler for NOT FOUND set you := 0;
 
        open getgoods; 
           repeat        
            fetch getgoods into r_gid,r_num,r_name;
            select r_gid ,r_num,r_name;
           until you=0 end repeat;
        close getgoods;  
    end$
例13:游标cursor  for
    /*
    declare [exit|continue|undo] handler for NOT FOUND set you := 0;
    声明是使用continue 将会出现最后一条数据重复  因为conticue 触发不回立即停止  
    反之exit立即停止
    undo 触发撤销最后一条    mysql 还不支持    
 
    改变逻辑修复continue的最后一条数据重复问题  
    首先查询赋值在循环
    */
    create procedure p14()
    begin
         declare r_gid int;    
        declare r_num int;     
        declare r_name char(20);    
        declare you int default 1;    
 
        declare getgoods cursor for select gid,num,name from goods;  
        declare continue handler for NOT FOUND set you := 0;
 
        open getgoods; 
              fetch getgoods into r_gid,r_num,r_name;
          repeat
            select r_gid ,r_num,r_name;        
            fetch getgoods into r_gid,r_num,r_name;            
           until you=0 end repeat;
        close getgoods;  
    end$
例14: 
    create procedure p15()
    begin
         declare r_gid int;    
        declare r_num int;     
        declare r_name char(20);    
        declare you int default 1;    
 
        declare getgoods cursor for select gid,num,name from goods;  
        declare continue handler for NOT FOUND set you := 0;
 
        open getgoods; 
              fetch getgoods into r_gid,r_num,r_name;
          while you = 1 do
            select r_gid ,r_num,r_name;        
            fetch getgoods into r_gid,r_num,r_name;            
          end while;
        close getgoods;  
    end$

 

存储过程procedure的更多相关文章

  1. SQL Server 数据库的维护(一)__存储过程(procedure)

    --维护数据库-- --存储过程(procedure)-- --概述: SQl Serve的存储过程是由一个或多个T-SQL语句组成的一个集合.常用的程序代码段通常被创建成存储过程,一次创建多次调用, ...

  2. Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】

    Oracle存储过程procedure in.out.in out 模式参数 Oracle存储过程基本语法介绍 注意存过不会自动提交,需要在存过本身添加commit; rollback;等语句

  3. 数据库之存储过程Procedure

    数据库之存储过程 一.概述 SQLserver中视图通过简单的select查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到. 二.什么是存储过程 存储过程procedure是一组 ...

  4. oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)

    开发过程中,需要不停的备份数据库对象, 特别是存储过程, 每次手动备份不免很低能啊 历经几次修改终于, 完美了,O(∩_∩)O哈哈~      (当然,你也可以再改简便一点~~~) select db ...

  5. Oracle 存储过程 PROCEDURE

    存储过程  一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一 ...

  6. Oracle 存储过程procedure之数据更新-游标

    在日常工作中,经常会碰到后台外导一批数据,并将外导数据处理至系统表中的情况. 面临这种情况,我一般采用写存储过程批处理的方式完成,写好一次以后,再次有导入需求时,只需要将数据导入到中间表,然后执行存储 ...

  7. Sqlserver2005:深入了解php执行sqlserver存储过程procedure:odbc_exe、odbc_execute

    以下存储过程(伪代码): -- 伪代码,假设相关操作是成功的 alter procedure pr_test as begin set nocount on update tab set col='n ...

  8. mysql存储过程(procedure)

    #创建带参数的存储过程 delimiter // ),out p int) begin ; end // delimiter call pro_stu_name_pass(@n,@p); select ...

  9. PL/SQL 05 存储过程 procedure

    --存储过程(不带参数) create or replace procedure 存储过程名as  变量.常量声明;begin  代码;end; --存储过程(带输入参数) create or rep ...

随机推荐

  1. CSS过滤器

    CSS过滤器(CSS filters)最初是为了向SVG矢量图提供不同的图片效果.现在,CSS filters 不在局限于在SVG中使用,也可以在图片.文字和其它元素上使用.CSS过滤器效果并不难理解 ...

  2. UIkit框架之uiUIapplication

    1.继承链:uiresponder:NSObject 2.使用 sharedApplication方法来存取对象 3.这个类可以遵守协议是UIApplicationDelegate 4.获取app的实 ...

  3. 关于IE9-解决background-size的问题

    body{background:url("/branch/comm/images-new/login.jpg") no-repeat;background-size:100%;fi ...

  4. react native 之上传文件

    最近遇到react native中需要上传一些图片到后台.期间,找了一些第三方上传插件,感觉不太好用,要么只支持一个平台,要么会对其他第三方造成影响,实在无奈.只能直接使用fetch上传.其中上传文件 ...

  5. How can i use iptables save on centos 7?

    I installed CentOS 7 with minimal configuration (os + dev tools). I am trying to open 80 port for ht ...

  6. flash上传控件跨域

    工作中需要使用百度开发的ueditor,但服务器部署中前端代码和后端代码在不同的域名下,现已解决的前端调后端代码的跨域问题.可是,ueditor中的上传图片flash控件也涉及跨域问题,经过查找发现可 ...

  7. JAVA Web day01--- Android小白的第一天学习笔记

    HTML 1.HTML的概述 1.1.HTML简介 l HTML(Hyper Text Markup Language):超文本标记语言. >标记就是标签 >HTML不是一种编程语言,而是 ...

  8. 最全的运营推广方案,教你如何从零开始运营APP

    转载自:最全的运营推广方案,教你如何从零开始运营APP(http://www.kusocial.com/9319 ) 最全的运营推广方案,教你如何从零开始运营APP 2014-10-07 • 运营 • ...

  9. Apache2 同源策略解决方案 - 配置 CORS

    什么是同源策略 现在的浏览器大多配有同源策略(Same-Origin Policy),具体表现如下: 浏览某一网站,例如 http://www.decembercafe.org/.这个网页中的 Aja ...

  10. (进阶篇)PHP+Mysql+jQuery找回密码

    通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...