存儲過程
1、命令
創建及調用
定義分隔符
DELIMITER $
創建存儲過程
delimiter $$
create procedure 名稱()
begin
語句
end$$
delimiter ;
調用存儲過程
call 名稱();
查看存儲過程
show procedure status where db='';
show create procedure pro_name;
刪除存儲過程
drop procedure pro_name;
2、參數
in
create procedure getname(in name varchar(100) default 'stone')
out
create procedure getsalary(in n varchar(100), out sla int)
call getsalary(‘stone’,@s)
select @s;
inout
結合了輸入輸出的功能,儘量少用
3、存儲過程語句
IF語句
IF expression THEN
statements;
END IF;
IF expression THEN
statements;
ELSE
else-statements
END IF;
CASE語句
CASE
WHEN [condition1]
THEN [result1]
……
WHEN [conditionn]
THEN [resultn]
ELSE result(n+1)
END;
WHILE語句
先檢驗條件,再執行循環體
while 條件 do
--循環體;
end while;
repeat語句
先執行一遍循環體,再檢驗條件
repeat
--循環體;
until 循環條件
end repeat;
4、自定義函數
CREATE FUNCTION 函數(參數 類型,[參數 類型,...])
RETURNS 返回類型
BEGIN
return
END;
5、儲存過程和函數的區別
1、存儲過程可以有多個in,out,inout參數,而函數只有輸入參數類型,而且不能帶in
2、存儲過程實現的功能要複雜一些;而函數的單一功能性(針對性)更強。
3、存儲過程可以返回多個值;存儲函數只能有一個返回值。
4、存儲過程一般獨立的來執行;而存儲函數可以作爲其它sql語句的組成部分來出現。
5、存儲過程可以調用存儲函數。函數不能調用存儲過程。
6、實例
delimiter $$
create procedure insert_c(num int)
begin
declare ran_name varchar(100) default 'QWERTYUIOPASDFFGHJKLZXVCBNMqazwsxedcrfvtgbyhnujmikolp';
declare ran_age int;
declare name varchar(50) default '';
declare i int default 0;
declare j int default 0;
start transaction;
while i < num do
set ran_age = floor(rand()*100);
while j < 20 do
set name = concat(name,substring(ran_name,floor(1+rand()*53),1));
set j=j+1;
end while;
insert into course(cname,age) values(name,ran_age);
set i = i+1;
set name = '';
set j = 0;
end while;
commit;
end$$
delimiter ;