mysql的儲存過程

2021-08-05 23:42:57 字數 3698 閱讀 5045

(一)儲存過程是儲存在資料庫目錄中的一段宣告性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中,引數有三種模式:inoutinout

引數定義格式:mode為inoutinout

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'

);

要開發返回多個值的

儲存過程

,需要使用帶有inoutout引數的儲存過程。

以下儲存過程接受客戶編號,並返回發貨(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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...