1.MySQL存儲過程

存儲過程

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 ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章