加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中构建用户自定义函数

发布时间:2023-08-08 14:33:07 所属栏目:MySql教程 来源:
导读:总有一些复杂的逻辑我们还需要多处使用,此时就显现出函数的重要性。

mysql函数的要素

函数名

参数列表

函数体

返回值

定义语法

create function fun_name(参数列表)

returns 返回值
总有一些复杂的逻辑我们还需要多处使用,此时就显现出函数的重要性。
 
mysql函数的要素
 
函数名
 
参数列表
 
函数体
 
返回值
 
定义语法
 
create function fun_name(参数列表)
 
returns 返回值类型
 
函数体
 
示例
 
不带参数
 
delimiter $$
 
create function sayhello()
 
returns varchar(20)
 
begin
 
return 'hello';
 
end$$
 
delimiter ;
 
调用示例:
 
select sayhello();
 
sayhello()
 
hello
 
带参数(参数需要标明数据类型)
 
    delimiter $$
 
    create function sayHelloToSomeOne(name varchar(20))
 
    returns varchar(25)
 
    begin
 
    set @str = concat('hello ',name);
 
    return @str;
 
    end
 
    $$
 
    delimiter ;
 
调用示例:
 
select sayHelloToSomeOne('Dany');
 
sayHelloToSomeOne('Dany')
 
hello Dany
 
函数调用过后我们验证一下@str变量是否依然可以访问。
 
select @str;
 
@str
 
hello Dany
 
@str依然可用,说明@str的作用域是全局的。
 
带多个参数
 
多个参数用逗号 , 分隔。
 
函数中的局部变量
 
参数(勉强认为是局部变量),因为参数传递进来只能在函数内部使用。
 
declare 定义局部变量
 
之前研究过以@开头的变量是全局变量,因为即使是在函数内部定义的变量例如:@aa ,在调用过函数后,@aa的值在外部我们依然可以得到,这就很明显的告诉我们,@aa是全局变量。
 
全局变量容易引发变量污染,所以我们需要局部变量,来保证程序独立。declare就是为了解决这一问题。
 
语法:
 
DECLARE var_name [, var_name] ... type [DEFAULT value];
 
例如:
 
    delimiter $$
 
    create function sayHelloToSomeOneVarLocal(name varchar(20))
 
    returns varchar(30)
 
    begin
 
    declare str varchar(30);
 
    set str = concat('hello ',name);
 
    return str;
 
    end
 
    $$
 
    delimiter ;
 
select sayHelloToSomeOneVarLocal('xiaogang');
 
sayHelloToSomeOneVarLocal('xiaogang')
 
hello xiaogang
 
函数调用之后我们再试图去访问变量str,会报错。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章