一,儲存過程的基本概念
儲存過程是一組為了完成某項特定功能的sql語句集,其實質上就是一段儲存在資料庫中的**,他是由宣告式sql語句(如create,uopdate,seletct等語句)和過程式sql語句(如if…then…else控制結構語句)組成。這組語句集經過編譯後會儲存在資料庫中,使用者只需要指定儲存過程的名字並給定引數就可以隨時呼叫並執行,而不必重新編譯,因此這種通過定義一段程式儲存在資料庫中的方式,可加大資料庫操作語句的執行效率。
乙個儲存過程是乙個可程式設計的函式,同時可看作是在資料庫程式設計中對物件導向方式的模擬,它允許控制資料的訪問方式。使用儲存過程通常具有以下優點:
1.可增強sql語言的功能和靈活性;
2.良好的封裝性
3.高效能
4.可減少網路流量
5.儲存過程可作為一種安全機制來確保資料庫的安全性和資料的完整性
二,建立儲存過程並且呼叫儲存過程
在mysql資料庫中通過命令列的方式來建立儲存過程時,經常用到乙個十分重要的命令,即delimiter命令,使用delimiter命令,將mysql語句的結束語標誌臨時修改為其他符號,從而使mysql伺服器可以完整的處理儲存過程中所以的mysql語句,而後可通過delimiter命令再將mysql語句的標誌符號改回預設符號,即(;)。
delimiter !
!//自定義整個儲存過程的結束符為!!
delimiter ;
//如若希望換回預設的結束符號,就執行這條命令
在mysql中,建立儲存過程的語法是:
create procedure sp_name
(proc_parameter,proc_parameter...
)routine_body
格式含義:
sp_name:儲存過程的名稱,預設在當前資料庫中建立
proc_parameter:指定儲存過程的引數列表,mysql儲存過程支援三種型別的引數,即輸入引數,輸出引數和輸入/輸出引數,分別用(in,out,inout)表示
routine_body:表示儲存過程的主體部分,這個部分以begin開始,以end結束
舉例乙個應用題
,在資料庫mysql_test中建立乙個儲存過程為sp_update_***,並且將客戶id號為909的客戶性別修改為男性「m」
use mysql_test;
//應用乙個資料庫
delimiter !
!//自定義整個過程的結束符
create procedure sp_update_***
(in cid int,
in c*** char(1
))begin
update customers set cust_***=c*** where cust_id=cid;
end!
!call sp_update_***
(909
,"m");
//呼叫儲存函式
刪除儲存過程
儲存過程在被建立後,會被儲存在伺服器上以供使用,直至刪除,在mysql中可以使用drop procedure語句來刪除資料庫中已經建立的儲存過程,舉例:
// 刪除資料庫mysql_test中儲存過程sp_update_***
drop procedure sp_update_***;
//防止因刪除不存在的儲存函式而引發的錯誤,可加上關鍵字if exists
drop procedure if exists sp_update_***;
儲存函式和儲存過程一樣,都是由sql語句和過程式語句所組成的**片段,並且可以被應用程式和其他sql語句呼叫
儲存過程和儲存函式和區別:
1.儲存函式不能擁有輸出引數,這是因為儲存函式自身就是輸出引數,而儲存過程可以擁有輸出引數
2.可以直接對儲存函式進行呼叫,且不需要使用call語句,而對儲存過程進行呼叫需要用call語句
3.儲存函式中必須包含一條return語句,而這條特殊的sql語句不允許包含於儲存過程中
建立儲存函式
在mysql中,可以使用create function語句來建立乙個儲存函式,語法格式為:
create function
sp_name
(func_parameter...
)//func_parameter的語法格式為:parameter_name type
returns type
routine_body
語法格式:
sp_name:儲存函式的名稱,注意的是儲存函式不能和儲存過程同乙個名字
func_parameter:儲存函式的引數,注意這的引數只有名稱和型別,不能指定關鍵字(in,out,inout)
returns:用於宣告儲存函式返回值的資料型別,type代表返回值的資料型別
routine_body:儲存函式的主題部分,也是儲存函式體。
應用題
,在資料庫mysql_test中建立乙個儲存函式,要求該函式能根據給定的客戶id號返回客戶的性別,如果資料庫中沒有給定的客戶id號,則返回「沒有該客戶」
use mysql_test;
delimiter !
!create function
fn_search
(cid int)
returns char(2
) deterministic
begin
declare *** char(2
);select cust_*** into *** from customers
where cust_id=cid;
if *** is null then
return
(select"沒有該客戶");
else
if ***=
"f" then
return
(select"女");
else
return
(select"男");
end if
; end if
; end !
!
呼叫儲存函式,使用關鍵字select呼叫
應用題
,呼叫資料庫mysql_test中儲存函式fn_search。
select fn_search<
904>
;
刪除儲存函式
在儲存函式被建立後,會被儲存在伺服器上以供使用,直至被刪除,刪除儲存函式方法和刪除儲存過程的方法基本是一樣的。使用drop function語句來刪除
// 刪除資料庫mysql_test中儲存函式sp_update_***
drop procedure fn_search;
//防止因刪除不存在的儲存函式而引發的錯誤,可加上關鍵字if exists
drop procedure if exists fn_search;
Oracle資料庫儲存過程和儲存函式
指儲存在資料庫中供所有使用者程式呼叫的子程式叫儲存過程 儲存函式。儲存過程沒有返回值。儲存函式有返回值 建立儲存過程 用create procedure命令建立儲存過程和儲存函式。語法 create or replace procedure過程名 引數列表 as plsql子程式體 儲存過程示例 為...
資料庫之儲存過程和儲存函式 六
儲存過程是一組為了完成某項特定功能的sql語句集,其實質就是一段儲存在資料庫中的 它可以由宣告式的sql語句和過程式sql語句組成。1.可以增強sql語言的功能和靈活性 2.良好的封裝性 3.高效能 4.減少網路流量 5.可作為一種安全機制來確保資料庫的安全性和資料的完整性 自定義結束符 delim...
資料庫 建立和使用儲存過程和儲存函式
儲存過程 stored procedure 和儲存函式 stored function 是在資料庫中定義的一些完成特定功能的sql語句集合,其經編譯後儲存在資料庫中。儲存過程和儲存函式中可包含流程控制語句及各種sql語句。它們可以接受引數 輸出引數 返回單個或者多個結果。在mysql中使用儲存過程,...