function_procedure
function_procedure
函數(shù)
mysql內置的函數(shù)很好用,同樣mysql也支持用戶自定義函數(shù)
1.為避免和函數(shù)中的語句結束符;
沖突,將語句結束符號臨時重定義為$$
delimiter $$
2.書寫函數(shù)體
- 語法
create function 函數(shù)名(參數(shù)列表) returns 返回值類型
begin
declare 變量名 變量類型;
邏輯語句;
return 返回值;
end
$$
- 示例
create function num_add() returns varchar(100)
begin
declare i int default 1;
declare x varchar(100) default '';
while i < 20 do
if i%2 = 0 then
set x = concat(x, " ", i);
end if;
set i = i + 1;
end while;
return x;
end
$$
3.將語句結束符還原為;
delimiter ;
4.調用函數(shù)
select num_add();
運行結果:
mysql_function
函數(shù)體中也可以編寫sql語句,但不能使用
select...from...
,所以通過sql對數(shù)據(jù)表進行操作的任務,最好交給"存儲過程"
存儲過程
與函數(shù)相比,"存儲過程"可以對"所有sql語句"進行完美封裝.
1.為避免和"存儲過程"中的語句結束符;
沖突,將語句結束符號臨時重定義為$$
delimiter $$
2.創(chuàng)建"存儲過程"
- 語法
create procedure 存儲過程名稱(參數(shù)列表)
begin
sql語句;
end
$$
- 示例
create procedure show_func_and_proc()
begin
select name, type, db from mysql.proc;
end
$$
3.將語句結束符還原為;
delimiter ;
4.調用新建的存儲過程
call show_func_and_proc();
運行結果:
mysql_procedure
小結
函數(shù)和存儲過程中的主體都被
begin...end
嵌套,這是一種名為"事務"的結構,目的是保證begin...end
以內的語句不可分割,要么完整執(zhí)行,要么不執(zhí)行.