MySQL | 自定義函式
阿新 • • 發佈:2018-12-11
一、是什麼
使用者自己定義函式
由於設計函式的每一條指令都是一個獨立的個體,因此需要語句結束符,因為函式是一個整體,且不能被中斷。MySQL 一旦見到語句結束符就會自動開始執行
解決方案
在定義函式之前,修改臨時的語句結束符 ;
在 MySQL 中使用 delimiter
來修改臨時語句結束符。預設情況下,delimiter是分號 ;
在命令列客戶端中,如果有一行命令以分號結束,那麼回車後,mysql將會執行該命令。
語法:
delimiter 新符號 //使用系統非內建的符號,如 $$ 正常 SQL指令 //此時語句後有 ; 也不會執行 使用新符號結束 delimiter ; //將語句結束符改為 ;
二、建立函式
自定義函式包含這幾個要素
- function 關鍵字
- 函式名
- 引數(可以為空)
- 函式體
- 返回值
語法:
delimiter 新符號
create function 函式名(形參) returns 返回值型別
begin
函式體
return 返回值資料 //資料必須與結構中定義的返回值型別一致
end
新符號 //用於結束語句
delimiter ; //將結束符重新改為 ;
1.建立無參函式
可以看到,如果不修改語句結束符,當遇到 ;
時就會結束語句
我們修改語句結束符,此時函式中的語句當見到符號 ;
時不會自動執行了。當然別忘了還要將結束符號重新變為 ;
如果函式本身只有一條指令 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 函式名
六、注意事項
- 自定義函式是屬於使用者級別的,只有當前客戶端對應的資料庫中才可以使用。
- 可以在不同的資料庫下看到對應的函式,但是不能呼叫
- 函式因為必須規範返回值,在函式內部不能使用 select 指令,因為該指令一旦執行會得到一個結果集,這是不允許的