iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 28

第二十八日-MYSQL預存程序 STORED PROCEDURE:來寫一個BMI小程式(1)

  • 分享至 

  • xImage
  •  

我們在處理資料時,很常遇到一個情況:每天要撈差不多的東西!
每天要下的指令其實大同小異,只是輸入日期不同,
像這種重複性很高的事情,
通常會寫一支預存程序處理,
除了可以節省我們語法貼來貼去的時間,還能加快一點處理速度

建立預存程序的時候,MYSQL會先把我們下的語法編譯一次,
之後每次呼叫預存程序,MYSQL都不用再編譯,
就像是我們看外文書,
我們第一次看的時候,好好做中文筆記(編譯),之後再看就可以對照筆記,
不用每次看時都要重新用GOOGLE翻譯。

寫預存程序會提到下面幾個概念:

  • 分隔符號 DELIMITER
  • STORED PROCEDURE建立語法
  • 參數
  • 變數
  • 流程控制

我們一步步認識這些概念,寫出輸入身高和體重後,可以計算出BMI的小程序。

分隔符號 DELIMITER

我們之前有提到「;」對MYSQL而言,相當於逗號,
也就是MYSQL看到「;」,便會認為「這個句子結束了」,
然而,有時後我們可能需要一個段落一起執行,
而不是單句、單句分別執行。

例如我們如果寫一個小段落:
「今天天氣很好,很適合出去玩;但正要出門的時候就下雨了,所以待在家看電視;」
MYSQL可能讀取到 「今天天氣很好,很適合出去玩;」 便以為語法結束了,
於是理解成今天適合出去玩,
但事實上我們的結論是「下雨了,待在家看電視」。

防止這種狀況的方法便是使用分隔符號 DELIMITER。
MYSQL會在讀取到DELIMITER時,才結束讀取語法。
DELIMITER使用方法是

  1. DELIMITER
  2. 空格
  3. 符號(可以自己決定要用什麼,我是用$$)
DELIMITER $$

像這樣設定之後,我們可以把文章改成
「今天天氣很好,很適合出去玩;但正要出門的時候就下雨了,所以待在家看電視$$」
MYSQL就會把整段讀取完。

STORED PROCEDURE建立語法

STORED PROCEDURE預存程序通常會是一整段語法,
我們會先設定分隔符號,確保預存程序整段被執行。

DELIMITER $$

接下來加上建立預存程序的語法,預存程序語法會CREATE PROCEDURE開始,
幫預存程序命名後,會填入參數,以及參數的型別,
再用BEGIN和END把中間的語法包起來,
最後輸入剛剛設定的分隔符號,
告訴MYSQL要從第一行執行到分隔符號這裡。

DELIMITER $$
CREATE PROCEDURE [SP名稱] ([參數名稱1] [型別1],[參數名稱2] [型別2])

BEGIN
[程式邏輯放這裡]
END
$$

明天再解釋參數是什麼,程式邏輯部分可以先想想,
之前介紹的IF寫法要怎麼寫,試著先用中文出來,
例如:
BMI=體重/(身高乘身高)
IF BMI小於18 顯示過輕

寫出來後再翻成語法看看,明天介紹囉!


上一篇
第二十七日-MYSQL的「如果」:IF、CASE基本用法
下一篇
第二十九日-MYSQL預存程序 STORED PROCEDURE:來寫一個BMI小程式(2)
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言