zoukankan      html  css  js  c++  java
  • MySQL存储过程之参数和复合语句

    CREATE PROCEDURE p5 ([
        [ IN | OUT | INOUT ] name1 data-type ,
        ...                                                       ,
        [ IN | OUT | INOUT ] nameN data-type 
    ]) ... 

      参数列表可以为空,也可以有多个,关键词IN | OUT | INOUT,可省略,默认IN.

    1. IN 输入的例子

    mysql> CREATE PROCEDURE p5(p INT)
        SET @x = p //
    mysql> CALL p5(12345)//
    mysql> SELECT @x//

      上面代码执行后会显示输入的12345.过程体内将参数p的值赋值给会话变量x,然后调用过程并传递12345给参数p,调用完毕后显示会话变量@x.

      说明变量名前加@表示为会话变量,作用域为整个用户的会话周期.不加@表示用户自定义的局部变量.关于会话变量:

      1) 可以先在用户变量中保存值然后在以后引用它;这样可以将值从一个语句传递到另一个语句。

      2) 用户变量与连接有关,即一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

      3) 用户变量的形式为@var_name,其中变量名var_name可以由当前字符集的文字数字字符、‘.’、‘_’和‘$’组成。 默认字符集是cp1252 (Latin1)。可以用mysqld的default-character-set选项更改字符集。

      4) 用户变量名对大小写不敏感。
      5) 设置用户变量的一个途径是执行SET语句:

    SET @var_name = expr [, @var_name = expr] ...

        对于SET,可以使用=或:=作为分配符。分配给每个变量的expr可以为整数、实数、字符串或者NULL值。

        也可以用语句代替SET来为用户变量分配一个值。在这种情况下,分配符必须为:=而不能用=,因为在非SET语句中=被视为一个比较 操作符:

    mysql> SET @t1=0, @t2=0, @t3=0;
    mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

    +-------------------------------+------+------+------+

    | @t1:=(@t2:=1)+@t3:=4  | @t1 | @t2  | @t3 |

    +-------------------------------+------+------+------+

    |          5                           |    5  |    1   |    4  |

    +-------------------------------+------+------+------+

      6) 用户变量可以用于表达式中。目前不包括明显需要文字值的上下文中,例如SELECT语句的LIMIT子句,或者LOAD DATA语句的IGNORE number LINES子句。

      7) 如果使用没有初始化的变量,其值是NULL。

    2. OUT 输出的例子

    mysql > CREATE PROCEDURE p6 (OUT p INT)
             -> SET p = -5 //
    mysql> CALL p6(@y) //
    mysql> SELECT @y //  

      本例中,p是输出参数,调用过程将p的值传入会话变量@y中.

    3. 复合语句

    CREATE PROCEDURE p7 ()
    BEGIN
        SET @a = 5;
        SET @b = 5;
        INSERT INTO t VALUES (@a);
        SELECT s1 * @a FROM t WHERE s1 >= @b;
    END; //   /* 这个语句将不会被调用*/ 

      复合语句一般由BEGIN/END块包括.可以用块去封装多条语句,完成一些sql语句进行变量定义和流程控制等.

      

  • 相关阅读:
    学习进度笔记1——安装scala
    随堂测试——数据清洗
    Mapreduce实例——Webcount
    第十七周个人总结
    ppt转为.scr(屏保)
    navicat15 破解
    vue echarts饼图封装以及同一个组件2个饼图不加载问题解决
    阿里云 django+vue前后端分离汇总
    阿里云 django+vue前后端分离 前端打包上传
    阿里云服务器 django+vue前后端分离 nginx配置
  • 原文地址:https://www.cnblogs.com/free-coder/p/4774005.html
Copyright © 2011-2022 走看看