SQL编程语法

作者: StrongZhao | 来源:发表于2018-05-11 16:46 被阅读75次
    声明变量:

    语法:declare var_name[,...] type [default value]
    说明:这个语句被用来声明局部变量。要给变量提供一个默认值,需要包含一个default子句。值可以被指定为一个表达式,不需要为一个常数。如果没有default子句,初始值为null。局部变量的作用范围在它被声明的begin ... end块内。它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。
    ex:

    declare a int default 0;
    declare b int default 1;
    declare c,d int;
    
    变量赋值
    • set语句:
      语法:set var_name = expr [, var_name = expr] ...
      说明:也可以用语句代替set来为用户变量分配一个值。在这种情况下,分配符必须为:=而不能用=,因为在非set语句中=被视为一个比较 操作符
      ex:
    set @a=0,@b=0,@c=0;
    或
    select @a:=1,@b:=2,@c:=3; 
    

    ps:对于使用select语句为变量赋值的情况,若返回结果为空,即没有记录,此时变量的值为上一次变量赋值时的值,如果没有对变量赋过值,则为null。

    • select... into语句
      语法:select col_name[,...] into var_name[,...] table_expr
      说明:这个select语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
      ex:
    select id,name into x,y from user limit 1;
    
    begin...end复合语句

    语法:
    [begin_label:] begin
    [statement_list]
    end [end_label]
    说明:存储子程序可以使用begin... end复合语句来包含多个语句。statement_list 代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。 复合语句可以被标记。除非begin_label存在,否则end_label不能被给出,并且如果二者都存在,他们必须是同样的
    ex:

    \\ begin
        declare a int default 1;
        declare b int default 4;
        declare c int;
        if a+b == 5 then
            c = a+b;
        end if;
      end//
    
    流程控制结构
    • if语句
      语法:
      if search_condition then
      statement_list
      [else if search_condition then
      statement_list] ...
      [else statement_list]
      end if
      说明:statement_list可以包括一个或多个语句。
      ex:
    delimiter //
    create procedure test(in inparameter int)
    begin
          declare a int;
          set a = inparameter + 1;
          if a = 0 then
             .......;
          end if;
          if inparameter = 0 then
              .......;
          else
              .......;
         end if;
    end; //
    delimiter ;
    
    • case语句
      语法:
      case case_value
      when when_value then statement_list
      [when when_value then statement_list] ...
      [else statement_list]
      end case
      或者:
      case
      when search_condition then statement_list
      [when search_condition then statement_list] ...
      [else statement_list]
      end case
      ex:
    create procedure test2 (in parameter1 int)
    begin
         declare a int;
         set a = parameter1 + 1;
         case a
              when 0 then insert into  t values(166);
              when 1 then insert into t values(158);
              else insert into t values(198);
         end case;
    end; 
    
    • 循环语句
      语法:
      while… end while
      loop… end loop
      repeat… end repeat
      说明:在循环中还穿插一些循环控制语句,如leave(类似Java语言的break)、iterate(类似java语言的continue)等。
      leave语句
      leave label 这个语句被用来退出任何被标注的流程控制构造。它和begin... end或循环一起被使用。
      iterate语句
      iterate label iterate只可以出现在loop, repeat, 和while语句内。iterate意思为:再次循环。
      ps:iterate 跟Java语言中的迭代器不同含义
      while… end while ex:
    create procedure test3 ()
    begin
         declare a int;
         set a = 0;
         while a < 5 do
               set a = a + 1;
          end while;
    end; 
    

    loop … end loop ex:

    create procedure test4 ()
    begin
         declare a int;
         set a = 0;
         loop_label: loop
             set a = a + 1;
             if a >= 5 then
                 leave loop_label;
             end if;
        end loop;
    end; 
    

    ps:loop允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直到循环被退出,退出通常伴随着一个leave 语句。
    repeat … end repeat ex:

    create procedure test5 ()
    begin
         declare a int;
         set a = 0;
         repeat
              set a = a + 1;
         until a >= 5 end repeat;
    end; 
    

    迭代(ITERATE)语句ex:

    create procedure test6 ()
    begin
         declare a int;
         set a = 0;
         loop_label: loop
             if a = 3 then
                 set a = a + 1;
                 iterate loop_label;
             end if;
             set a = a + 1;
             if a >= 5 then
                 leave loop_label;
             end if;
         end loop;
    end; 
    
    条件和异常处理程序:

    语法:
    declare handler_type handle for condition_value[,...] sp_statement
    handler_type:
    continue | exit | undo
    condition_value:
    SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION

    说明:这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。
    对一个CONTINUE处理程序,当前子程序的执行在执行处理程序语句之后继续。对于EXIT处理程序,当前BEGIN...END复合语句的执行被终止。UNDO 处理程序类型语句还不被支持。
    SQLWARNING是对所有以01开头的SQLSTATE代码的速记。
    NOT FOUND是对所有以02开头的SQLSTATE代码的速记。
    SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。

    声明自定义条件:

    语法:declare condition_name condition for condition_value
    condition_value:
    SQLSTATE [VALUE] sqlstate_value
    ex:

    create table test (s1 int,primary key (s1));
    delimiter //
    create procedure handlerdemo ()
    begin
         declare continue handle for SQLSTATE '23000' SET @x = 3; 
         set @x = 1;
         insert into test values(1);
         set @x = 2;
         insert into test values(2);
         set @x = 3;
    end;//
    delimiter ;
    

    相关文章

      网友评论

      本文标题:SQL编程语法

      本文链接:https://www.haomeiwen.com/subject/ztgfdftx.html