MySQL存储过程

MySQL调用存储过程和函数

用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

1. 调用存储过程

存储过程是通过 CALL 语向进行调用的,语法如下:

CALL sp_name ( [ parameter [ , ... ] ] )

CALL 语句调用一个先前用 CREATE PROCEDURE 创建的存储过程,其中 sp_name 为存储过程的参数。

【例】 定义名为 Countproc1 的存储过程,然后调用这个存储过程。

定义存储过程的代码如下:

mysql> DELIMITER  //
mysql> CREATE  PROCEDURE  CountProc1  (IN  sid  INT,  OUT  num  INT )
    -> BEGIN
    ->   SELECT  COUNT(*)  INTO  num  FROM  fruits  WHERE  s_id = sid;
    -> END //
Query OK, 0 rows affected (0.42 sec)
 
mysql> DELIMITER  ;
    

【注】COUNT(*) 函数返回在给定的选择中被选的行数。

调用存储过程的代码如下:

mysql> CALL  CountProc1  ( 101 , @num );
Query OK, 1 row affected (0.39 sec)

查看返回结果:


mysql> SELECT  @num;
+------+
| @num |
+------+
|    3 |
+------+

2. 调用存储函数

在 MySQL 中,存储函数的使用方法与 MySQL 内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与 MySQL 的内部函数是一个性质的。 区别在于,存储函数是用户自己定义的,而内部函数是 MySQL 的开发者定义的。

【例】 定义存储函数 CountProc2, 然后调用这个函数。

定义存储函数的代码如下:


mysql> DELIMITER  //
mysql> CREATE  FUNCTION  CountProc2  ( sid  INT  )
    -> RETURNS  INT
    -> BEGIN
    ->  RETURN  (  SELECT  COUNT(*)  FROM  fruits  WHERE  s_id = sid );
    -> END  //
Query OK, 0 rows affected (0.10 sec)
 
mysql> DELIMITER  ;

调用存储函数的代码如下:

mysql> SELECT  CountProc2(101);
+-----------------+
| CountProc2(101) |
+-----------------+
|               3 |
+-----------------+