14.2调用存储过程和函数
存储过程和存储函数都是存储在服务器端的SQL语句的集合。要使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现。存储过程是通过CALL语句来调用的。而存储函数的使用方法与MySQL内部函数的使用方法是一样的。执行存储过程和 存储函数需要拥有EXECUTE权限。EXECUTE权限的信息存储在information_schema数据库下'面的USER_PRIVILEGES'表中。本小节将详细讲解如何调用存储过程和存储函数。
14.2.1调用存储过程
MySQL中使用CALL语句来调用存储过程。调用存储过程后,数据库系统将执行存储过程中的语句。然后,将结果返回给输出值。CALL语句的基本语法形式如下:
CALL sp_name([parameter[,...]]);
其中,sp_name是存储过程的名称;parameter是指存储过程的参数。
【示例14-19】下面定义一个存储过程,然后调用这个存储过程。代码执行如下:
//创建存储过程 mysql> DELIMITER && mysql> CREATE PROCEDURE num_from_employee (IN emp_id INT, OUT count_num INT ) -> READS SQL DATA -> BEGIN -> SELECT COUNT(*) INTO count_num -> FROM employee -> WHERE d_id=emp_id ; -> END && Query OK, 0 rows affected (0.09 sec) mysql> DELIMITER ; //调用存储过程 mysql> CALL num_from_employee(1002,@n); Query OK, 0 rows affected (0.02 sec) //查询返回的结果 mysql> SELECT @n; +---+ l@n | +---+ | 1 | +---+ 1 row in set (0.00 sec)
由上面代码看出,使用CALL语句来调用存储过程;使用SELECT语句来查询存储过程的输出值。
14.2.2 调用存储函数
在MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与MySQL内部函数是一个性质的。区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的。
【示例14-20】下面定义一个存储函数,然后调用这个存储函数。代码执行如下:
//创建存储函数 mysql> DELIMITER && mysql> CREATE FUNCTION name_from_employee (emp_id INT ) -> RETURNS VARCHAR(20) -> BEGIN -> RETURN (SELECT name -> FROM employee -> WHERE num=emp_id); -> END&& Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ; //调用存储函数 mysql> SELECT name__from_employee(3); +---------------------+ |name_from_employee(3)| | 王五| +---------------------+ 1 row in set (0.03 sec)
上述存储函数的作用是根据输入的emp_id值到employee表中查询记录。查询出num字段的值等于emp_id的记录。然后将该记录的name字段的值返回。