1. 程式人生 > >mysql中創建用戶自定義函數

mysql中創建用戶自定義函數

mysql 用戶自定義函數

總有一些復雜的邏輯我們還需要多處使用,此時就顯現出函數的重要性。

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的作用域是全局的。

帶多個參數

多個參數用逗號 , 分隔。

函數中的局部變量

  1. 參數(勉強認為是局部變量),因為參數傳遞進來只能在函數內部使用。
  2. 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,會報錯。

mysql中創建用戶自定義函數