成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL基礎(chǔ)教程之存儲(chǔ)過(guò)程

數(shù)據(jù)庫(kù) MySQL
存儲(chǔ)過(guò)程簡(jiǎn)單來(lái)說(shuō),就是為以后的使用而保存的一條或多條MySQL語(yǔ)句的集合。可將其視為批件,雖然它們的作用不僅限于批處理。在我看來(lái), 存儲(chǔ)過(guò)程就是有業(yè)務(wù)邏輯和流程的集合, 可以在存儲(chǔ)過(guò)程中創(chuàng)建表,更新數(shù)據(jù), 刪除等等。

存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程簡(jiǎn)單來(lái)說(shuō),就是為以后的使用而保存的一條或多條MySQL語(yǔ)句的集合。可將其視為批件,雖然它們的作用不僅限于批處理。

在我看來(lái), 存儲(chǔ)過(guò)程就是有業(yè)務(wù)邏輯和流程的集合, 可以在存儲(chǔ)過(guò)程中創(chuàng)建表,更新數(shù)據(jù), 刪除等等。

為什么要使用存儲(chǔ)過(guò)程

  1. 通過(guò)把處理封裝在容易使用的單元中,簡(jiǎn)化復(fù)雜的操作(正如前面例子所述)。
  2. 由于不要求反復(fù)建立一系列處理步驟,這保證了數(shù)據(jù)的完整性。如果所有開(kāi)發(fā)人員和應(yīng)用程序都使用同一(試驗(yàn)和測(cè)試)存儲(chǔ)過(guò)程,則所使用的代碼都是相同的。這一點(diǎn)的延伸就是防止錯(cuò)誤。需要執(zhí)行的步驟越多,出錯(cuò)的可能性就越大。防止錯(cuò)誤保證了數(shù)據(jù)的一致性。
  3. 簡(jiǎn)化對(duì)變動(dòng)的管理。如果表名、列名或業(yè)務(wù)邏輯(或別的內(nèi)容)有變化,只需要更改存儲(chǔ)過(guò)程的代碼。使用它的人員甚至不需要知道這些變化。

一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程

  1. create procedure porcedureName () 
  2. begin 
  3.     select name from user
  4. end 

存儲(chǔ)過(guò)程用create procedure 創(chuàng)建, 業(yè)務(wù)邏輯和sql寫在begin和end之間。mysql中可用call porcedureName ();來(lái)調(diào)用過(guò)程。

  1. -- 調(diào)用過(guò)程 
  2. call porcedureName ();  

該存儲(chǔ)過(guò)程沒(méi)有參數(shù), 只是在調(diào)用的時(shí)候查詢了用戶表的用戶名而已, 調(diào)用結(jié)果如下

name
admin
admin1
admin2
admin3

刪除存儲(chǔ)過(guò)程

  1. DROP PROCEDURE IF EXISTS porcedureName; -- 沒(méi)有括號(hào)() 

使用參數(shù)的存儲(chǔ)過(guò)程

  1. create procedure procedureName( 
  2.     out min decimal(8,2), 
  3.     out avg decimal(8,2), 
  4.     out max decimal(8,2) 
  5. BEGIN 
  6.     select MIN(price) INTO min from order
  7.     select AVG(price) into avg from order
  8.     select MAX(price) into max from order
  9. END 

此過(guò)程接受三個(gè)參數(shù), 分別用于獲取訂單表的最小、平均、最大價(jià)格。每個(gè)參數(shù)必須具有指定的類

型,這里使用十進(jìn)制值(decimal(8,2)), 關(guān)鍵字OUT指出相應(yīng)的參數(shù)用來(lái)從存儲(chǔ)過(guò)程傳出

一個(gè)值(返回給調(diào)用者)

MySQL支持IN(傳遞給存儲(chǔ)過(guò)程)、OUT(從存儲(chǔ)過(guò)程傳出,如這里所用)和INOUT(對(duì)存儲(chǔ)過(guò)程傳入和傳出)類型的參數(shù)。存儲(chǔ)過(guò)程的代碼位于BEGIN和END語(yǔ)句內(nèi),如前所見(jiàn),它們是一系列SELECT語(yǔ)句,用來(lái)檢索值,然后保存到相應(yīng)的變量(通過(guò)指定INTO關(guān)鍵字)

為調(diào)用此修改過(guò)的存儲(chǔ)過(guò)程,必須指定3個(gè)變量名,如下所示:(所有MySQL變量都必須以@開(kāi)始。)

  1. -- 由于過(guò)程指定三個(gè)參數(shù), 故調(diào)用必須要參數(shù)匹配 
  2. call procedureName(@min, @avg, @max);  

該調(diào)用并沒(méi)有任何輸出, 只是把調(diào)用的結(jié)果賦給了調(diào)用時(shí)傳入的變量(@min, @avg, @max)。然后即可調(diào)用顯示該變量的值。

  1. select @min, @avg, @max

結(jié)果如下

@min @avg @max
42.00 601.00 2222.00

使用in參數(shù), 輸入一個(gè)用戶id, 返回該用戶所有訂單的總價(jià)格。

  1. create procedure getTotalById ( 
  2.     in userId int
  3.     out total decimal(8,2) 
  4. BEGIN 
  5.     select SUM(r.price) from order r 
  6.     where r.u_id = userId 
  7.     into total; 
  8. END 

調(diào)用存儲(chǔ)過(guò)程

  1. call getTotalById(1, @total); 
  2. select @total;  

結(jié)果將返回該用戶所有訂單的合計(jì)價(jià)格。

復(fù)雜一點(diǎn)的過(guò)程, 根據(jù)用戶id獲取該用戶的所有訂單價(jià)格, 并動(dòng)態(tài)的選擇是否加稅。代碼設(shè)計(jì)如下

  1. create procedure getTotalByUser2( 
  2.     in userId int
  3.     in falg boolean, -- 是否加稅標(biāo)記 
  4.     out total decimal(8,2) 
  5. begin 
  6.     DECLARE tmptotal DECIMAL(8,2); 
  7.     DECLARE taxrate int DEFAULT 6;-- 默認(rèn)的加稅的利率 
  8.      
  9.     select SUM(r.price) from order r 
  10.     where r.u_id = userId 
  11.     into tmptotal; 
  12.      
  13.     if taxable then 
  14.         select tmptotal + (tmptotal/1000*taxrate) into tmptotal; 
  15.     end if; 
  16.      
  17.     select tmptotal into total; 
  18. END 

該過(guò)程傳入三個(gè)參數(shù), 用戶id, 是否加稅以及返回的總價(jià)格,在過(guò)程內(nèi)部, 定義兩個(gè)局部變量tmptotal和taxrate,把查詢出來(lái)的結(jié)果賦給臨時(shí)變量, 在判斷是否加稅。最后把局部變量的值賦給輸出參數(shù)。 

  1. call getTotalByUser2(1, false, @total); -- 不加稅 
  2. call getTotalByUser2(1, true, @total);  -- 加稅 
  3. select @total; 

 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2017-07-18 10:14:23

OracleMerge into教程

2010-05-12 17:55:30

MySQL 5.0

2009-07-24 09:20:15

數(shù)組實(shí)例

2009-06-22 09:23:18

事件監(jiān)聽(tīng)器

2011-04-15 09:20:56

ASP.NET MVC

2010-06-13 11:21:32

MySQL 5.0

2009-07-24 10:09:08

ASP.NET個(gè)性化ASP.NET基礎(chǔ)教程

2010-06-11 13:53:54

UML建模

2021-07-16 07:21:45

C++可調(diào)用對(duì)象std::functi

2009-10-21 17:36:36

VB基礎(chǔ)教程

2017-12-12 07:47:59

dockermarathon服務(wù)器

2011-07-18 09:35:29

iPhone 框架

2009-07-22 13:32:43

iBATIS DAO

2021-02-06 07:49:48

C語(yǔ)言編程開(kāi)發(fā)技術(shù)

2011-07-07 13:58:13

Windows 200活動(dòng)目錄

2009-10-26 09:04:35

VB.NET數(shù)據(jù)庫(kù)基礎(chǔ)

2010-06-28 09:21:04

SQL Server存

2011-07-21 10:17:53

java

2011-09-13 16:39:50

Android UI設(shè)

2022-09-29 07:27:50

DaprKubernetes
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩一卡 | 国产美女永久免费无遮挡 | 国产精品一级 | 日本 欧美 三级 高清 视频 | 婷婷福利| 精品综合| 欧美精品久久久久久久久久 | 精品一区二区三区视频在线观看 | www在线视频 | 97精品国产97久久久久久免费 | 久久精品国产亚洲夜色av网站 | 丝袜美腿一区二区三区动态图 | 欧美自拍第一页 | 日本小电影在线 | 亚洲精品大全 | 国产在线观看一区二区 | 久久成人18免费网站 | 成人免费福利视频 | 黄网站在线播放 | 日韩av成人在线 | 中文字幕动漫成人 | 黄色一级特级片 | 精品国产乱码久久久久久果冻传媒 | 久久成人精品视频 | 国产精品一区在线 | 国产精品日日摸夜夜添夜夜av | 亚洲区一区二 | 亚洲性在线 | 在线四虎 | 国产成人精品久久二区二区 | 成人亚洲视频 | 中文字幕综合 | 欧美黄色一区 | 最近免费日本视频在线 | 亚洲精品68久久久一区 | 午夜精品一区二区三区在线 | 成人免费看电影 | 日韩1区| 日韩超碰在线 | 国产日韩欧美二区 | 亚洲精品福利在线 |