首页  >  文章  >  数据库  >  Mysql存储过程学习笔记_MySQL

Mysql存储过程学习笔记_MySQL

WBOY
WBOY原创
2016-06-01 13:46:04891浏览

bitsCN.com

 

参数

mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT

Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形…])

IN 输入参数

表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数

该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数

调用时指定,并且可被改变和返回

IN参数例子:

创建

mysql> CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT) BEGIN SELECT p_in; /*查询输入参数*/*/ SET p_in=2; /*修改*/ select p_in;/*查看修改后的值*/ END;

执行结果:

mysql> set @p_in=1

mysql> call sp_demo_in_parameter(@p_in)

——

| p_in |

——

|    1 |

——

 

——

| p_in |

——

|    2 |

——

 

mysql> select @p_in;

 

——-

| @p_in |

——-

| 1     |

——-

 

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

OUT参数例子

创建:

mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT) BEGIN SELECT p_out;/*查看输出参数*/ SET p_out=2;/*修改参数值*/ SELECT p_out;/*看看有否变化*/ END;

执行结果:

mysql> SET @p_out=1

mysql> CALL sp_demo_out_parameter(@p_out)

——-

| p_out |

——-

|  NULL |

——-

/*未被定义,返回NULL*/

——-

| p_out |

——-

|     2 |

——-

 

mysql> SELECT @p_out;

——-

| p_out |

——-

|     2 |

———-

INOUT参数例子:

mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT) BEGIN SELECT p_inout; SET p_inout=2; SELECT p_inout; END;

 

执行结果:

set @p_inout=1

call sp_demo_inout_parameter(@p_inout) //

———

| p_inout |

———

|       1 |

———

 

———

| p_inout |

———

|       2 |

———

 

 

select @p_inout;

 

———-

| @p_inout |

———-

| 2        |

———-

 

用户变量

1、  在mysql客户端使用用户变量

mysql> SELECT ‘Hello World’ into @x;

mysql> SELECT @x;

————-

| @x          |

————-

| Hello World |

————-

mysql> SET @y=’Goodbye Cruel World’;

 

mysql> select @y;

———————

| @y                  |

———————

| Goodbye Cruel World |

———————

 

mysql> SET @z=1 2 3;

mysql> select @z;

——

| @z   |

——

| 6    |

——

 

2、  在存储过程中使用用户变量

mysql> CREATE PROCEDURE GreetWorld(  )  SELECT CONCAT(@greeting,’ World’);

mysql> SET @greeting=’Hello’;

 

mysql> CALL GreetWorld(  );

—————————-

| CONCAT(@greeting,’ World’) |

—————————-

| Hello World                |

—————————-

 

3、  在存储过程间传递全局范围的用户变量

mysql> CREATE PROCEDURE p1(  )   SET @last_procedure=’p1′;

 

mysql> CREATE PROCEDURE p2(  )  SELECT CONCAT(‘Last procedure was ‘,@last_procedure);

 

mysql> CALL p1(  );

 

mysql> CALL p2(  );

———————————————–

| CONCAT(‘Last procedure was ‘,@last_procedure) |

———————————————–

| Last procedure was p1                         |

———————————————–

 

注意:

①用户变量名一般以@开头

②滥用用户变量会导致程序难以理解及管理

注释

mysql存储过程可使用两种风格的注释

双模杠:–

该风格一般用于单行注释

c风格:/* 注释内容*/ 一般用于多行注释

bitsCN.com
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn