即事先经过编译并存储在数据库中的一段sql语言。

一、创建函数

创建格式:

CREATE FUNCTION sp_name ([func_parameter[,...]])

RETURNS type

[characteristic ...] routine_body

func_parameter:

param_name type

总结:函数的参数前不能有修饰符如,IN,OUT(不同于存储过程),调用时可直接调用,像系统函数一般使用。

mysql> DELIMITER $$

mysql> CREATE FUNCTION func_emsal(empno INT)

-> RETURNS DOUBLE(10,2)

-> COMMENT ' 查询某个雇员的工资'

-> BEGIN

-> RETURN(

-> SELECT sal

-> FROM employee

-> WHERE employee.empno=empno);

-> END $$

调用方式:SELECT func_emsal (empno);

二、存储过程

创建格式:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

proc_parameter:

[ IN | OUT | INOUT ] param_name type

IN用于说明是传入参数,OUT为返还结果的参数(即开始时没有值,调用后有值),INOUT则充当两者的角色

总结:IN,OUT,INOUT用于指定参数的类型,OUT参数的赋值使用set操作符(与局部变量赋值类似),调用时使用call,out参数要有@修饰。

举例:

mysql> DELIMITER $$

mysql> CREATE PROCEDURE proce_emsal()

-> COMMENT '查询所有雇员的工资'

-> BEGIN

-> SELECT sal

-> FROM employee;

-> END$$

调用方式:CALL proce_emsal( );

05-02 15:42