MYSQL 自定義函式

2021-09-27 10:30:44 字數 2370 閱讀 8939

==!!!關於函式體!!!==

函式的呼叫

函式的檢視

函式的修改

函式的刪除

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...