<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **目錄** [TOC=2] ## 1 宣告與使用變數 在Stored routines中,除了可以宣告需要的參數外,如果需要處理比較復雜的資料,你也可以宣告「區域變數、local variables」。下列是宣告區域變數的語法與位置: ![mysql_14_snap_01](http://box.kancloud.cn/2015-09-15_55f7f06ea49f7.jpg) 下列是幾種宣告區域變數的范例: ![mysql_14_snap_02](http://box.kancloud.cn/2015-09-15_55f7f06ef2a5a.jpg) 宣告需要的區域變數后,你就可以在stored routines中使用它們,需要指定變數值的話,可以使用下列兩種語法: ![mysql_14_snap_03](http://box.kancloud.cn/2015-09-15_55f7f06f52386.jpg) 下列是宣告與使用「SET」敘述指定變數的范例: ![mysql_14_snap_04](http://box.kancloud.cn/2015-09-15_55f7f06fe8b15.jpg) 下列的范例使用「SELECT」敘述,把查詢敘述回傳的資料指定給變數: ![mysql_14_snap_05](http://box.kancloud.cn/2015-09-15_55f7f07042fd8.jpg) 在Stored routines中宣告區域變數,一定要放在「BEGIN」與「END」區塊中: ![mysql_14_snap_06](http://box.kancloud.cn/2015-09-15_55f7f070aa88b.jpg) 在一個Stored routines中,除了基本的「BEGIN」與「END」區塊,也可以再使用「BEGIN」與「END」設定一個區塊,每一個區塊都可以宣告需要的區域變數: ![mysql_14_snap_07](http://box.kancloud.cn/2015-09-15_55f7f07119bcc.jpg) 在「BEGIN」與「END」區塊中宣告的區域變數,只有在宣告的區塊中有效,這也是它稱為區域變數的原因: ![mysql_14_snap_08](http://box.kancloud.cn/2015-09-15_55f7f071babce.jpg) 如果你使用一個已經被清除的區域變數,在建立stored routines時不會有問題,不過使用的時候就會發生錯誤: ![mysql_14_snap_09](http://box.kancloud.cn/2015-09-15_55f7f0774020b.jpg) 在同一個區塊宣告變數時,不可以使用同樣的變數名稱;不過你可以在內層區塊中,使用外層區塊已經使用過的變數名稱,可是要特別注意它們的有效范圍: ![mysql_14_snap_10](http://box.kancloud.cn/2015-09-15_55f7f0778b3f1.jpg) 注:在撰寫stored routines時,如果在多個區塊中宣告變數,應該還是使用不同的變數名稱會好一些。 ## 2 判斷 建立與使用stored routines可以幫你一次執行許多敘述,簡化資料庫的操作;除了這個好處外,stored routines還提供許多判斷的語法,讓你可以執行需要的判斷,再根據判斷的結果執行不同的工作。 ### 2.1 IF MySQL在stored routines中提供「IF」敘述,你可以在「IF」敘述中設定判斷的條件,與條件成立時要執行的工作。下列是「IF」敘述的語法: ![mysql_14_snap_11](http://box.kancloud.cn/2015-09-15_55f7f078893a7.jpg) 下列的procedure范例接收一個表示體重的整數參數,它會使用這個參數來判斷體重是否太重,如果超過100公斤的話,就會顯示「You are heavy!」: ![mysql_14_snap_12](http://box.kancloud.cn/2015-09-15_55f7f07902b40.jpg) 呼叫上列的「test_weight」procedure范例會有下列的結果: ![mysql_14_snap_13](http://box.kancloud.cn/2015-09-15_55f7f07e57c5a.jpg) 如果你希望體重超過100公斤時,顯示「You are heavy!」,體重沒有超過100公斤時,顯示「Good!」。這樣的需求可以在「IF」敘述中使用「ELSEIF」判斷其它需要的條件: ![mysql_14_snap_14](http://box.kancloud.cn/2015-09-15_55f7f07ed9a9c.jpg) 呼叫上列的「test_weight2」procedure范例會有下列的結果: ![mysql_14_snap_15](http://box.kancloud.cn/2015-09-15_55f7f07f72cfc.jpg) 你可以依照需求在「IF」敘述中使用多個「ELSEIF」來判斷不同的條件,也可以使用一個「ELSE」來處理所有條件都不成立時要執行的工作: ![mysql_14_snap_16](http://box.kancloud.cn/2015-09-15_55f7f07fe98e3.jpg) 呼叫上列的「test_weight3」procedure范例會有下列的結果: ![mysql_14_snap_17](http://box.kancloud.cn/2015-09-15_55f7f08052fc5.jpg) 標準體重會依照身高與性別而不同,所以會有類似下列這樣的表格: | 身高范圍 | 性別 | 標準體重 | | --- | --- | --- | | 160~164 | 男 | 58 | | 165~169 | 男 | 60 |? 女 |56 |? | 170~174 | 男 | 64 |? 女 |60 | 下列是一個依照上列表格所完成的標準體重函式: ![mysql_14_snap_18](http://box.kancloud.cn/2015-09-15_55f7f080a6f67.jpg) 完成可以傳回標準體重的「std_weight」函式以后,就可以用在下列這個判斷體重的procedure中: ![mysql_14_snap_19](http://box.kancloud.cn/2015-09-15_55f7f08143f69.jpg) ### 2.2 CASE 在stored routines中還可以使用「CASE」敘述執行條件判斷的工作。「CASE」敘述有兩種語法,第一種語法跟「IF」敘述是很類似的: ![mysql_14_snap_20](http://box.kancloud.cn/2015-09-15_55f7f081c0dd5.jpg) 以判斷體重的需求來說,使用「CASE」敘述同樣可以完成: ![mysql_14_snap_21](http://box.kancloud.cn/2015-09-15_55f7f082b7076.jpg) 「CASE」敘述還可以使用下列這種語法: ![mysql_14_snap_22](http://box.kancloud.cn/2015-09-15_55f7f08320059.jpg) 這樣的語法很適合使用在類似「ENUM」資料型態的判斷,例如下列這個判斷季節的procedure: ![mysql_14_snap_23](http://box.kancloud.cn/2015-09-15_55f7f0887fc14.jpg) 使用這種「CASE」語法來執行判斷工作時,要特別注意錯誤資料的處理: ![mysql_14_snap_24](http://box.kancloud.cn/2015-09-15_55f7f08941fc7.jpg) 你應該加入「ELSE」來預防錯誤資料造成的問題: ![mysql_14_snap_25](http://box.kancloud.cn/2015-09-15_55f7f0899f571.jpg) ## 3 回圈 在stored routines中如果需要執行一個工作多次的時候,就可以使用「回圈、loops」,搭配使用判斷與回圈,把一些固定又繁復的工作撰寫成stored routines儲存起來,可以大幅度簡化資料庫的操作。 ### 3.1 WHILE 下列是可以用來執行一個工作多次的「WHILE」回圈語法: ![mysql_14_snap_26](http://box.kancloud.cn/2015-09-15_55f7f08a0e3a7.jpg) 你必須依照需求設定「WHILE」回圈語法中的判斷條件,由它來控制回圈是否繼續執行: ![mysql_14_snap_27](http://box.kancloud.cn/2015-09-15_55f7f08f6e4c4.jpg) 下列的「summary_while」范例可以為你從1開始加總到參數指定的數字: ![mysql_14_snap_28](http://box.kancloud.cn/2015-09-15_55f7f08fb6744.jpg) ### 3.2 REPEAT 下列是可以用來執行一個工作多次的「REPEAT」回圈語法: ![mysql_14_snap_29](http://box.kancloud.cn/2015-09-15_55f7f0903a010.jpg) 你必須依照需求在「REPEAT」回圈語法中的「UNTIL」設定判斷條件,由它來控制回圈是否繼續執行: ![mysql_14_snap_30](http://box.kancloud.cn/2015-09-15_55f7f090b383e.jpg) 下列的「summary_repeat」范例可以為你從1開始加總到參數指定的數字: ![mysql_14_snap_31](http://box.kancloud.cn/2015-09-15_55f7f09617d96.jpg) ### 3.3 LOOP 下列是可以用來執行一個工作多次的「LOOP」回圈語法: ![mysql_14_snap_32](http://box.kancloud.cn/2015-09-15_55f7f09b8257b.jpg) 如果只是單純的使用「LOOP」回圈的話,只要進入回圈后,就會不斷重復執行回圈中的敘述,永遠不會停止: ![mysql_14_snap_33](http://box.kancloud.cn/2015-09-15_55f7f0a5e413c.jpg) ## 4 標簽 在使用「BEGIN-END」、「WHILE」、「REPEAT」與「LOOP」四種區塊時,都可以為它們設定「標簽、label」: ![mysql_14_snap_34](http://box.kancloud.cn/2015-09-15_55f7f0a64d65b.jpg) 標簽是由你自己為這些區塊取的名字,下列使用「LOOP」回圈來說明標簽的設定規則,這個規則同樣適用在其它三種區塊: ![mysql_14_snap_35](http://box.kancloud.cn/2015-09-15_55f7f0a6b81fa.jpg) 在一般的狀況下,通常不需要為區塊設定標簽。如果為了控制sotred routines的執行流程,才會設定區塊的標簽。設定標簽以后,就可以搭配使用「LEAVE」敘述來控制流程,下列是「LEAVE」敘述在「LOOP」回圈中的效果: ![mysql_14_snap_36](http://box.kancloud.cn/2015-09-15_55f7f0a7203ea.jpg) 「LEAVE」敘述在其它三種區塊中有同樣的效果: ![mysql_14_snap_37](http://box.kancloud.cn/2015-09-15_55f7f0a77c41e.jpg) 搭配使用「LEAVE」敘述來控制流程,就可以控制「LOOP」回圈在需要的時候離開。下列的「summary_loop」范例可以為你從1開始加總到參數指定的數字: ![mysql_14_snap_38](http://box.kancloud.cn/2015-09-15_55f7f0a7da3c5.jpg) 設定標簽以后,也可以搭配使用「ITERATE」敘述來控制流程,下列是「ITERATE」敘述在「LOOP」回圈中的效果: ![mysql_14_snap_39](http://box.kancloud.cn/2015-09-15_55f7f0ad47f88.jpg) 「ITERATE」敘述不可以使用在「BEGIN-END」區塊中,不過它在其它兩種區塊中有同樣的效果: ![mysql_14_snap_40](http://box.kancloud.cn/2015-09-15_55f7f0ad90e1e.jpg) 下列的「summary_iterate」范例可以為你從1開始加總到參數指定的數字,不過額外使用「ITERATE」敘述控制,讓這個function只會加總奇數: ![mysql_14_snap_41](http://box.kancloud.cn/2015-09-15_55f7f0adde913.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看