(一)儲存過程是儲存在資料庫目錄中的一段宣告性sql語句。
在mysql 5.0版本以後,儲存過程,
儲存函式
,觸發器
和事件這些功能才被新增到mysql資料庫引擎。
delimiter //
create
procedure getallproducts(
)begin
select
*from products;
end //
delimiter
;
sql
讓我們來詳細地說明上述儲存過程:
2、使用call
語句呼叫儲存過程,例如呼叫getallproducts()
儲存過程,則使用以下語句:
call getallproducts(
);
3、顯示儲存過程字元
使用show procedure status
語句如下:
show
procedure
status
[like
'pattern'
|where expr]
;
例項:show
procedure
status
where name like
'%product%'
要顯示特定儲存過程的源**,請使用show create procedure
語句如下:
show
create
procedure stored_procedure_name
sql
在show create procedure
關鍵字之後指定儲存過程的名稱。例如,要顯示getallproducts
儲存過程的**,請使用以下語句:
show
create
procedure getallproducts;
(二)儲存過程的變數
1、變數必須先宣告,才能使用。
使用declare
語句來宣告變數,格式:
declare variable_name datatype(size)
default default_value;
mysql允許您使用單個declare
語句宣告共享相同資料型別的兩個或多個變數:
declare x, y int
default
0;
2、使用set
語句為變數賦值,還可以使用select into
語句將查詢的結果分配給乙個變數。
declare total_products int
default
0select
count(*
)into total_products
from products
3、變數範圍(作用域)
begin end
塊內宣告乙個變數,那麼如果達到end
,則變數的作用域結束。
以@
符號開頭的變數是會話變數。直到會話結束前它可用和可訪問。
(三)儲存過程的引數
在mysql中,引數有三種模式:in
,out
或inout
。
引數定義格式:mode為in
,out
或inout
。
mode param_name param_type(param_size)
如果儲存過程有多個引數,則每個引數由逗號(,
)分隔。
use
`yiibaidb`
;drop
procedure
ifexists
`getofficebycountry`
;delimiter $$
use`yiibaidb`$$
create
procedure getofficebycountry(
in countryname varchar
(255))
begin
select
*from offices
where country = countryname;
end$$
delimiter
;
假設我們想要查詢在美國(usa
)的所有辦事處,我們只需要將乙個值(usa
)傳遞給儲存過程,如下所示:
call getofficebycountry(
'usa'
);
要開發返回多個值的
儲存過程
,需要使用帶有inout
或out
引數的儲存過程。
以下儲存過程接受客戶編號,並返回發貨(shipped),取消(canceled),解決(resolved)和爭議(disputed)的訂單總數。
delimiter $$
create
procedure get_order_by_cust(
in cust_no int
,out shipped int
,out canceled int
,out resolved int
,out disputed int
)begin
-- shipped
select
count(*
)into shipped
from
orders
where
customernumber = cust_no
andstatus
='shipped'
; -- canceled
select
count(*
)into canceled
from
orders
where
customernumber = cust_no
andstatus
='canceled'
; -- resolved
select
count(*
)into resolved
from
orders
where
customernumber = cust_no
andstatus
='resolved'
; -- disputed
select
count(*
)into disputed
from
orders
where
customernumber = cust_no
andstatus
='disputed'
;end
mysql儲存過程 MySQL儲存過程
在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...
mysql 儲存過程 mysql 儲存過程
建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...
mysql 儲存過程 MySQL儲存過程
目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...