日期:2014-05-16 浏览次数:20845 次
创建函数:
1. 存储函数也是过程式对象之一,与存储过程很相似。
它们都是由SQL和过程式语句组成的代码片断,并且可以从应用程序和SQL中调用。然而,它们也有一些区别:
(1)存储函数不能拥有输出参数,因为存储函数本身就是输出参数;
(2)不能用CALL语句来调用存储函数;
(3)存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中。
2.创建存储函数使用CREATEFUNCTION语句。
要查看数据库中有哪些存储函数,可以使用show function satus命令(与存储过程类似)。CREATE function语法格式:
CREATE FUNCTION sp_name ([func_parameter[,...]])
returns type
[characteristic ...] routine_body
说明:存储函数的定义格式和存储过程相差不大。
● sp_name是存储函数的名称。存储函数不能拥有与存储过程相同的名字。
● func_parameter是存储函数的参数,参数只有名称和类型,不能指定IN、OUT和INOUT。RETURNS type子句声明函数返回值的数据类型。
● routine_body是存储函数的主体,也叫存储函数体,所有在存储过程中使用的SQL语句在存储函数中也适用,包括流程控制语句、游标等。但是存储函数体中必须包含一个RETURN value语句,value为存储函数的返回值。这是存储过程体中没有的。
例1: 创建一个存储函数,它返回XS表中学生的数目作为结果。
DELIMITER $$
CREATE FUNCTION NUM_OF_XS()
RETURNS INTEGER
BEGIN
RETURN (SELECT COUNT(*)FROM XS);
END$$
DELIMITER ;
例2: 创建一个存储函数来删除XS_KC表中有但XS表中不存在的学号。
DELIMITER $$
CREATE FUNCTION DELETE_STU(XH CHAR(6))
RETURNS BOOLEAN
BEGIN
DECLARE STU CHAR(6);
SELECT 姓名 INTO STU FROM XS WHERE 学号=XH;
IF STU IS NULL THEN
DELETE FROM XS_KCWHERE 学号=XH;
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END$$