存储过程(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. initcall调用顺序

    在解释initcall调用顺序, 先要理一下编译链接的知识. 每个.o文件都有自己的代码段, 数据段(存放初始化的全局变量), bss段(即未初始化的数据段) 在ld链接器将各.o文件的代码段和数据段 ...

  2. REVERSE-DAILY(5)-rev2

    比较有意思的一道题目  提示是一个迷宫 链接: http://pan.baidu.com/s/1pLhINBt 密码:91bs 先运行程序,要求是输入字符串,错误会输出"Sorry you ...

  3. 【一套C语言控制台的输出框代码】

    效果演示 可以生成一个输出框 首先 要创建输出框,设置输出框风格,可以设置的元素包括: 左上角符号,右上角符号,左下角符号,右下角符号,以及上下左右边界线符号,理论上,只要你电脑能显示的符号,都可以支 ...

  4. 【LeetCode OJ】Validate Binary Search Tree

    Problem Link: https://oj.leetcode.com/problems/validate-binary-search-tree/ We inorder-traverse the ...

  5. IE8下ajax请求失败的解决方案

    今天发现IE9以下的浏览器,ajax请求返回数据异常研究半天发现是type参数未设置,由于默认方式是Get,添加上type:“post”就恢复正常了

  6. destoon二次开发 操作数据库可运行示例

    <?phpdefine('IN_DESTOON', true);$userid= $_REQUEST["userid"];//$basepath=$_SERVER['PHP_ ...

  7. Android中常见功能包描述(转)

    在Android中,各种包写成android.*的方式,重要包的描述如下所示:android.app :提供高层的程序模型.提供基本的运行环境android.content:包含各种的对设备上的数据进 ...

  8. 号外:MS被开源软件打败了!

    [编辑推荐]微软宣布.NET将开源 支持Mac OS X和Linux (149/16525) » [最多推荐]Visual Studio Contact(); 直播笔记(44/2744) » [最多评 ...

  9. 怎么提高sql效率

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  10. c#关于日期的两个知识点

    1 C#中如何获得两个日期之间的天数差 DateTime d1;DateTime d2; int days = (d1 - d2).Days;//天数差 2 C#中从字符串得到DateTimeConv ...