mysql自定义函数

  mysql中的UDF(自定义函数),其实是个好东西,比如可以写好一些方法或 
函数,然后进行调用,而且是在SQL语句中可以进行调用。 
DROP FUNCTION CalculateAmount 

CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2) 
BEGIN 
DECLARE totalCredits FLOAT; 
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid; 
RETURN totalAmount; 
END 

   要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中, 
则可以象如SELECT CalculateAmount(1);那样去调用了。

 指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数

下列是一个例子,一个采用参数的函数使用一个SQL函数执行一个操作,并返回结果:

mysql> delimiter //
 
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
    -> RETURN CONCAT(‘Hello, ‘,s,‘!‘);
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> delimiter ;
 
mysql> SELECT hello(‘world‘);
+----------------+
| hello(‘world‘) |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)

如果在存储函数中的RETURN语句返回一个类型不同于在函数的RETURNS子句中指定类型的值,返回值被强制为恰当的类型。比如,如果一个函数返回一个ENUM或SET值,但是RETURN语句返回一个整数,对于SET成员集的相应的ENUM成员,从函数返回的值是字符串。

参考:http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#create-procedure

>显示库中所有的自定义函数信息:

show function status;

>创建自定义函数的过程如下demo1:

drop function if exists fn_binary_table;
delimiter //
create function fn_binary_table(
param_1   varchar(50)
)returns int
begin
 declare total  int default 0;
select count(*) into total from binary_table where file_type like param_1;
return total;
end;
//
delimiter ;

定义一个输出三个数中最大的数函数:demo2如下:

drop function if exists fn_three_max;
delimiter //
create function fn_three_max(
param_1  double,
param_2  double,
param_3  double
)returns double
begin
 declare max_val double;
 if param_1 > param_2 then
  SET max_val = param_1;
 else
  SET max_val = param_2;
 end if;
 IF param_3>max_val THEN
  SET max_val = param_3;
 END IF;
 return max_val; 
end;
//

调用此函数如下:

select fn_three_max(3,100,90);

简单说明:

mysql中:

declare用户定义一个局部变量

set  用户给变量赋值。

官方文档:

CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL}
       SONAME shared_library_name

DROP FUNCTION function_name

一个自定义函数 (UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL。

function_name 是 用在SQL声明中以备调用的函数名字。RETURNS 子句说明函数返回值的类型。shared_library_name 是共享目标文件的基本名,共享目标文件含有实现函数的代码。该文件必须位于一个能被你系统的动态连接者搜索的目录里。

你必须有mysql 数据库的INSERT 权限才能创建一个函数,你必须有mysql 数据库的DELETE权限才能撤销一个函数。这是因为CREATE FUNCTION 往记录函数名字,类型和共享名的mysql.func系统表里添加了一行,而DROP FUNCTION则是从表中删掉这一行。如果你没有这个系统表,你应该运行mysql_fix_privilege_tables脚本来创建一个。请参阅2.10.2节,“升级授权表”

一个有效的函数是一个用CREATE FUNCTION加载且没有用DROP FUNCTION移除的函数。每次服务器启动的时候会重新加载所有有效函数,除非你使用--skip-grant-tables参数启动mysqld。在这种情况下, 将跳过UDF的初始化,UDF不可用。

要了解编写自定义函数的说明,请参阅27.2.3节,“添加新的自定义函数”。要使得UDF机制能够起作用,必须使用C或者C++编写函数,你的系统必须支持动态加载,而且你必须是动态编译的mysqld(非静态)。

一个AGGREGATE函数就像一个MySQL固有的集合(总和)函数一样起作用,比如,SUM或COUNT()函数。要使得AGGREGATE 起作用,你的mysql.func表必须包括一个type列。如果你的mysql.func表没有这一 列,你应该运行mysql_fix_privilege_tables脚本来创建此 列。

更多:

http://www.cnblogs.com/huyong/archive/2011/04/28/2031541.html

mysql自定义函数,布布扣,bubuko.com

mysql自定义函数

上一篇:IDEA快捷键


下一篇:电脑快捷键