function_procedure
函數
mysql内置的函數很好用,同樣mysql也支援使用者自定義函數
1.為避免和函數中的語句結束符 ;
沖突,将語句結束符号臨時重定義為 $$
;
$$
delimiter $$
2.書寫函數體
- 文法
create function 函數名(參數清單) 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.調用函數
select num_add();
運作結果:
mysql_function
函數體中也可以編寫sql語句,但不能使用 select...from...
,是以通過sql對資料表進行操作的任務,最好交給"存儲過程"
存儲過程
與函數相比,"存儲過程"可以對"所有sql語句"進行完美封裝.
1.為避免和"存儲過程"中的語句結束符 ;
$$
;
$$
delimiter $$
2.建立"存儲過程"
create procedure 存儲過程名稱(參數清單)
begin
sql語句;
end
$$
create procedure show_func_and_proc()
begin
select name, type, db from mysql.proc;
end
$$
;
;
delimiter ;
4.調用建立的存儲過程
call show_func_and_proc();
mysql_procedure
小結
函數和存儲過程中的主體都被嵌套,這是一種名為"事務"的結構,目的是保證
begin...end
以内的語句不可分割,要麼完整執行,要麼不執行.
begin...end