日历

2018年九月
« 7月    
 12
3456789
10111213141516
17181920212223
24252627282930

最近评论

    linux企业应用

    mysql第五部分 mysql存储过程中的参数变量

    下面,学习怎样在存储过程中使用参数,首先看下面4个例子:
    1、create procedure p1() ……
    2、create procedure p2([IN] name data-type) ……
    3、create procedure p3(OUT name data-type) ……
    4、create procedure p4(INOUT name data-type) ……
    上面第一个例子的没有参数;第二个例子有一个输入参数(IN是input的缩写,而且参数默认是输入参数,所以IN可以省略不写);第三个例子中有一个输出参数;第四个例子中的参数既能作为输入参数也可以作为输出参数。根据这四个例子,再举几个实际的例子,第一种类型的例子在这里就不再列举了,“第二部分mysql为什么使用存储过程”使用的例子就是没有参数的情况。
        首先看一下输入的例子
    mysql> create procedure p6(i int) set @x=i;
    Query OK, 0 rows affected (0.01 sec)

    mysql> call p6(99);
    Query OK, 0 rows affected (0.01 sec)

    mysql> select @x;
    +——+
    | @x   |
    +——+
    | 99   |
    +——+
    1 row in set (0.00 sec)
        这个输入的例子演示的是有输入参数的存储程序,在存储程序中,将会话变量x设定为参数i的值,调用存储程序,将99输入参数i,然后显示会话变量@x,证明已经将参数值99存入到@x中。

             输出的例子
    mysql> create procedure p7(out i int) set i=-99;
    Query OK, 0 rows affected (0.00 sec)

    mysql> call p7(@y);
    Query OK, 0 rows affected (0.00 sec)

    mysql> select @y;
    +——+
    | @y   |
    +——+
    | -99  |
    +——+
    1 row in set (0.00 sec)
          在这里例子中i是一个输出参数,在过程调用中将i的值传给会话变量@y中,在存储过程程序中,i参数赋值-99,所以@y的值就是-99。通过这个调用过程可以看出,out是告诉DBMS后边的变量的值要从存储过程中传递出去,实际上和执行mysql> set @z=-88;表达了一样的效果。

        复合语句
        来看下面例子,由于mysql默认的行尾定界符是分号(;),而在使用复合语句的时候,复合语句中间有多个语句,每个语句要用分号作为行尾结束符,为了避免冲突需要重新定义mysql的行尾定界符号,在这里使用//作为mysql的行尾定界符。
    mysql> delimiter //
    mysql> create procedure p9()
        -> begin
        -> set @x=5;
        -> set @y=5;
        -> insert into t1(filed) values(@x);
        -> select filed * @x from t1 where filed >=@y;
        -> end;//
    mysql> call p9()//
    +————+
    | filed * @x |
    +————+
    |         25 |
    +————+
    1 row in set (0.00 sec)
    Query OK, 0 rows affected (0.00 sec)
        这个存储过程程序使用了BEGIN……END复合语句,在这个复合语句中可以包含多个语句,每个语句都必须用分号(;)结尾,在复合语句中,可以定义变量和逻辑语句。

    评论已关闭。