儲存過程的簡介以及簡單例項

2021-07-03 13:51:40 字數 2729 閱讀 6669

儲存過程簡介:

我們把若干條sql語句封裝起來,起個名字,----叫過程 

我們把此過程儲存在資料庫中,-----儲存過程 

儲存過程的優勢:

1、儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql 語句每執行一次就編譯一次,

所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete 時),可將此複雜操作用儲存過程封裝起來

與資料庫提供的事務處理結合一起使用。這些操作,如果用程式來完成,就變成了一條條的sql語句,可能要多次連線資料

庫。而換成儲存,只需要連線一次資料庫就可以了。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。

4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權。

建立語句:

delimiter $ 

create procedure procedurename() 

begin  

---sql語句 

end$ 

檢視已有的儲存過程:

show procedure status$

呼叫儲存過程:

call p1()$

刪除儲存過程

drop procedure p2; 

儲存過程中使用條件語句:

delimiter $; 

create procedure p2(width int,height int) 

begin  

select concat("面積是", width * height) as area; 

if width > height then 

select "fat"; 

elseif height > width then 

select "thin"; 

else 

select "fang"; 

end if; 

end$ 

#呼叫儲存過程,需要傳遞兩個引數

call p2(2,3)$

利用whlie迴圈求1-100的和: 

delimiter $; 

create procedure p3() 

begin 

declare total int default 0; #定義變數

declare num int default 0; 

while num<100 do 

set num := num +1; 

set total := total + num; 

end while; 

select concat("1-100的和是",total); 

end$ 

#呼叫 

call  p3()$ 

利用repeat迴圈來求1-100的和:

delimiter $; 

create procedure p4() 

begin 

declare total int default 0; 

declare i int default 0; 

repeat  

set i := i+1; 

set total := total + i; 

until i>=100 end repeat; 

select total;  

end$ 

case條件語句的用法:

delimiter $ 

create procedure p5() 

begin  

declare pos int default 0; 

set pos := floor(5*rand()); 

case pos 

when 1 then select "still flying"; 

when 2 then select "fall in sea"; 

when 3 then select "in the island"; 

else select "i don't know"; 

end case; 

end$ 

用游標設定計數器來取出所有的資料:

#游標(cursor)是系統為使用者開設的乙個資料緩衝區,存放sql語句的執行結果。

delimiter $;

create procedure p6() 

begin  

declare row_gid int default 0; 

declare row_num int default 0; 

declare row_name varchar(20); 

declare cnt int default 0; 

declare getgoods cursor for select gid,num,name from goods; #宣告游標

select count(*) into cnt  from goods;  

open getgoods;  #開啟游標

repeat 

set cnt :=cnt-1; 

fetch getgoods into row_gid,row_num,row_name; 

select row_gid,row_name; 

until cnt<=0 end  repeat; 

close getgoods;  #關閉游標

end$

簡單SQL儲存過程例項

例項1 只返回單一記錄集的儲存過程。銀行存款表 bankmoney 的內容如下 iduserid money zhangsan 男wangwu 男zhangsan男 要求1 查詢表bankmoney的內容的儲存過程 create procedure sp query bankmoney assele...

簡單SQL儲存過程例項

例項1 僅僅返回單一記錄集的儲存過程。銀行存款表 bankmoney 的內容例如以下id userid money 001zhangsan 男 30 002 wangwu 男 50 003 zhangsan 男 40 要求1 查詢表bankmoney的內容的儲存過程 create procedure...

簡單SQL儲存過程例項

例項1 僅僅返回單一記錄集的儲存過程。銀行存款表 bankmoney 的內容例如以下id userid money 001zhangsan 男 30 002 wangwu 男 50 003 zhangsan 男 40 要求1 查詢表bankmoney的內容的儲存過程 create procedure...