Mysql存储过程之基本语法

1.基本语法

 
 
CREATE PROCEDURE 存储过程名 (参数列表)
   BEGIN
         SQL语句代码块
   END





例子:   

IN X INT 表示一个存储过程参数类型为IN,参数类型为INT,名为X的参数。

存储过程参数类型】:有三种——IN,OUT,INOUT,将在下文详解

CREATE PROCEDURE  SP_TEST ( IN X INT)
   BEGIN
         SELECT X;
         SET X=100;
         SELECT X;
END

 (由于mysql中的command line默认以“;”为分隔符,所以我是在navicat中的新建查询执行上面的语句。当然你也可以用delimiter命令修改分隔符来输入以上命令。) 

       

调用:

SET @para=4;
CALL SP_TEST(@para);

显示结果如下:

本人在自建的一个名为bclsf中做此实验,之前的SP_TEST也是在这个数据库中创建的。

set @para=555;/*给一个名为@para的临时变量赋值为555(一旦关闭command line,其就会被销毁),在mysql中这些变量无需先define*/

call SP_TEST(@para);/*调用存储过程,SP_TEST,将@para作为参数传给它*/

下面显示的是SP_TEST两次SELECT 显示的结果


小节:这就是一个基础的存储过程,不依赖于任何表,虽然没有实际意义。但是就像"HELLO WORLD!"一样,可以对存储过程有一个概念。


2.存储过程参数类型

在上一小节说到的【 存储过程参数类型】参数类型,其有以下类型:

1.MySQL 存储过程 “IN” 参数:

   相当于C中的传值,比如上一节中的例子,@para的值传到了SP_TEST的X上,SP_TEST在其内部随便怎么搞X,那也只是在搞X,与@para没有关系。并且从SP_TEST外面无法得到X的值。记住:这(mysql 存储过程中的"in"参数)是一个彻头彻尾的局部变量....不信,请看:


2.MySQL 存储过程 “OUT” 参数:

  先把前面的SP_TEST drop掉,



重新创建SP_TEST,将参数定义为 OUT X INT.

CREATE PROCEDURE  SP_TEST ( OUT X INT)
   BEGIN
         SELECT X;
         SET X=100;
         SELECT X;
END

从command line client中来验证:



@para的值根本没有传进去,SP_TEST中的第一次SELECT,X竟然是NULL!,
而执行了SP_TEST(@para)之后其SELECT @para竟然显示的是100。

mysql存储过程的“OUT”参数传入了地址,却没有传入值。其在内部的修改会直接影响外面的变量。——不管传入什么参数parameter,一开始在存储过程中必然是NULL,但是在存储过程中对其的赋值又是直接对parameter的赋值(parameter是指在存储过程外面定义的变量,比如@para)
这个概念有些不好理解,高级语言中没的对应的概念,也不清楚这样设计有什么用(难道是为了防止sql注入攻击?)。

3.MySQL 存储过程 “INOUT” 参数:

强迫症式操作,drop掉SP_TEST,执行下面语句:

CREATE PROCEDURE  SP_TEST ( INOUT X INT)
   BEGIN
         SELECT X;
         SET X=100;
         SELECT X;
END

其实这就是C中的传值。不再废话,直接上图:




总结:
    如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回,要使用“inout” 类型参数。



龙觉寺CSDN_BLOG...原创...不总结永远一知半解,一知半解比无知更可怕


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值