==!!!關於函式體!!!==
函式的呼叫
函式的檢視
函式的修改
函式的刪除
delimiter 自定義符號 -- 如果函式體只有一條語句, begin和end可以省略, 同時delimiter也可以省略
create function 函式名(形參列表) returns 返回型別 -- 注意是retruns
begin
函式體 -- 函式內定義的變數如:set @x=1
; 變數x為全域性變數,在函式外面也可以使用
返回值end
自定義符號
delimiter ;
這裡需要注意的是delimiter //和delimiter ;兩句,delimiter是分割符的意思,因為mysql預設以";「為分隔符,如果我們沒有宣告分割符,那麼編譯器會把儲存過程當成sql語句進行處理,則儲存過程的編譯過程會報錯,所以要事先用delimiter關鍵字申明當前段分隔符,這樣mysql才會將」;"當做儲存過程中的**,不會執行這些**,用完了之後要把分隔符還原。
過程體的開始與結束使用begin與end進行標識。
create function
函式名(
[引數列表]
) returns 資料型別
begin
函式體(sql語句);
return 值;
end;
-- 最簡單的僅有一條sql的函式
create function myselect2
() returns int
return
666;
select myselect2()
;-- 呼叫函式
其中begin和end是可以省略的
create function f1
() returns nvarchar(30
)return
date_format
(now()
,'%y年%m月%d日'
);
通常往mysql資料庫插入中文的時候會報錯
mysql> select f2();
error 1366 (hy000): incorrect string value: '\xc4\xea09\xd4\xc2...' for column 'f2()' at row 1
這裡建議將上述建立函式中返回值由varchar改為nvarchar即可
create function
f2(num1 int,num2 int)
returns float(10
,2)return
(num1+num2)/2
;
create
table
`student`
(`id`
int(11
)not
null
auto_increment
,`name`
varchar(11
)default
null
,`age`
int(11
)default
null
,`***`
int(11
)default
null
,primary
key(
`id`
))
delimiter //
create function
f4(a int(11
),b varchar(11
),c int(11
),d int(11
)) returns int(11
)begin
insert into student
(id,name,age,***)
values
(a,b,c,d)
;return
last_insert_id()
;end
//delimiter;
-- 無參呼叫
select myselect3()
;-- 傳參呼叫(以上述有參函式為例)
select f2(10
,15);
+------
-----+
|f2(10
,15)|
+------
-----+
|12.50|+
----
-------
+
mysql自定義函式優點 MySQL自定義函式
在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...
mysql自定義函式命名 MySQL自定義函式
在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...
mysql 自定義函式
今天要做乙個排序,有中文和英文的,資料庫採用utf8編碼,排除來的不對,所以需要將中文轉換成中文的第乙個字母,然後來排序 先小小的看一下mysql的自定義函式 drop function if exists fntable 如果存在就刪除 delimiter 函式開始 create function...