日期:2014-05-16  浏览次数:20784 次

MySQL心得7-2-存储函数、触发器

创建函数:

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$$