MySQL(10) 自定義函式

2022-01-19 10:40:09 字數 2972 閱讀 5239

1、mysql(7)---儲存過程

2、mysql(8)---游標

3、mysql(9)---紀錄一次實際開發過程中用到的複雜儲存過程

它們唯一不不同點在於

儲存過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新

函式:有且僅有1 個返回,適合做處理資料後返回乙個結果。

1、建立函式

create function 函式名(引數列表) returns 返回型別

begin

函式體end/*

注意:1、引數列表 包含兩部分:引數名 引數型別

2、函式體:肯定會有return語句,如果沒有會報錯

如果return語句沒有放在函式體的最後也不報錯,但不建議

3、函式體中僅有一句話,則可以省略begin end

4、使用 delimiter語句設定結束標記

*/

2、呼叫函式
select 函式名(引數列表)
3、檢視函式
show function status;
4、刪除函式
drop function if exists function_name;
先把例子需要用到表給出

# 商品表

drop table if exists `mall_pro`;

create table `mall_pro` (

`mall_id` char(32) not null,

`pro_name` varchar(32) default '' comment '顯示名稱',

`cash_cost` double(10,1) default '0.0' comment '商品**',

`show_member` int(1) default '0' comment '顯示 0所有 1指定會員',

`status` int(1) default '1' comment '狀態:1正常 0刪除',

`key_id` varchar(32) default '0' comment '會員控制項表key',

primary key (`mall_id`)

) engine=innodb default charset=utf8 comment='商品表';

insert into `mall_pro` (`mall_id`, `pro_name`, `cash_cost`, `show_member`, `status`, `key_id`)

values

('1','手錶',100.0,0,1,'0'),

('2','手機',888.0,1,1,'0'),

('3','電腦',3888.0,1,1,'0');

1、無參
#案例:返回商品的個數

delimiter $

drop function if exists myf1;

create function myf1() returns int

begin

declare c int default 0;#定義區域性變數

select count(*) into c#賦值

2、有參

# 案例:根據商品名稱返回商品**

delimiter $

drop function if exists myf2$

create function myf2(proname varchar(20)) returns double

begin

set @sal=0;#定義使用者變數

select cash_cost into @sal #賦值

from mall_pro

where pro_name = proname;

return @sal;

end $

select myf2('手錶') $

這個會發現報異常

原因在儲存過程或者函式,傳人引數是中文的時候,那麼就需要將引數的型別varchar改成nvarchar;

3、實現傳入兩個float,返回二者之和

只要自己變優秀了,其他的事情才會跟著好起來(少將11)

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql自定義函式命名 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql 自定義函式

今天要做乙個排序,有中文和英文的,資料庫採用utf8編碼,排除來的不對,所以需要將中文轉換成中文的第乙個字母,然後來排序 先小小的看一下mysql的自定義函式 drop function if exists fntable 如果存在就刪除 delimiter 函式開始 create function...