1. 程式人生 > >MySQL | 自定義函式

MySQL | 自定義函式

一、是什麼

使用者自己定義函式

由於設計函式的每一條指令都是一個獨立的個體,因此需要語句結束符,因為函式是一個整體,且不能被中斷。MySQL 一旦見到語句結束符就會自動開始執行

解決方案

在定義函式之前,修改臨時的語句結束符 ;

在 MySQL 中使用 delimiter 來修改臨時語句結束符。預設情況下,delimiter是分號 ; 在命令列客戶端中,如果有一行命令以分號結束,那麼回車後,mysql將會執行該命令。

語法:

delimiter 新符號  //使用系統非內建的符號,如 $$
正常 SQL指令      //此時語句後有 ; 也不會執行
使用新符號結束
delimiter ;      //將語句結束符改為 ;

二、建立函式

自定義函式包含這幾個要素

  • function 關鍵字
  • 函式名
  • 引數(可以為空)
  • 函式體
  • 返回值

語法:

delimiter 新符號
create function 函式名(形參) returns 返回值型別
begin
    函式體
    return 返回值資料   //資料必須與結構中定義的返回值型別一致
end
新符號           //用於結束語句
delimiter ;     //將結束符重新改為 ;
1.建立無參函式

可以看到,如果不修改語句結束符,當遇到 ; 時就會結束語句 我們修改語句結束符,此時函式中的語句當見到符號 ; 時不會自動執行了。當然別忘了還要將結束符號重新變為 ;

PS

如果函式本身只有一條指令 return,此時我們可以省略 begin 和 return,甚至連 delimiter 都不需要用到

2.建立有參函式

如果函式包含形參

語法:注意形參的位置是變數名字在前面,這和我們使用其他語言不一樣

delimiter 新符號
create function 函式名(變數名 變數型別) returns 返回值型別
begin
    函式體
    return 返回值資料   //資料必須與結構中定義的返回值型別一致
end
新符號           //用於結束語句
delimiter ;     //將結束符重新改為 ;

建立形參是 int 型別的 a 和 b 的函式

三、檢視函式

1.可以檢視函式的狀態,檢視所有的函式

語法:show function status; 也可以使用萬用字元來查詢指定名字的函式,這裡我找的是剛才建立的函式

2.檢視函式的建立語句

語法:show create function 函式名

同樣查詢剛才建立的函式

四、呼叫函式

自定義函式呼叫的方式和系統內建函式呼叫的方式一致

語法:select 函式名(實參列表)

五、刪除函式

語法:drop function 函式名

六、注意事項

  1. 自定義函式是屬於使用者級別的,只有當前客戶端對應的資料庫中才可以使用。
  2. 可以在不同的資料庫下看到對應的函式,但是不能呼叫

  1. 函式因為必須規範返回值,在函式內部不能使用 select 指令,因為該指令一旦執行會得到一個結果集,這是不允許的