iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
AI & Data

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

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

  • 分享至 

  • xImage
  •  

昨天已經認識分隔符號 DELIMITER和STORED PROCEDURE建立語法,
建立出BMI小程式的骨幹,接下來我們將SP名稱取做BMICompute,會變成這樣。

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

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

再來是參數的介紹。

  • 參數(parameter)

參數的功用是把值帶進函式裡面
因為我們可能每次要計算或是要找的值不一樣,
所以不能預先跟程式說我們要用什麼值,
那我們就先用參數來代替,
之後用函式的時候,再跟程式說某某參數等於多少,
程式就會套入使用。

就像數學常常用到的未知數X,Y,Z,
如果我們設計一個程式叫做「加法」,
程式內容是「返回X+Y」,
但是程式不知道X跟Y是什麼,要我們告訴他,
那我們就會這樣用:加法(2,3),
程式會把X當成2,Y當成3,最後我們會收到2+3,也就是5。

而在BMI計算中,我們需要用到身高、體重、計算公式、過重標準,
這幾樣中那些是參數呢?
是「身高」和「體重」,
因為每次算的人身高和體重不一定會一樣,而且程式也不會知道,
必須我們跟程式說,
因此我們會設定預存程序BMICompute的參數有兩個:

身高:height
體重:weight

同時我們把這兩個參數設定成整數,
就會變成這樣:

DELIMITER $$
CREATE PROCEDURE BMICompute (`height` int,`weight` int)

BEGIN
[程式邏輯放這裡]
END
$$
  • 變數(variable)

接下來我們要撰寫程式邏輯,
BMI的公式是體重/(身高*身高),
我們的程式邏輯是:

如果BMI>24,回傳:你的BMI是{(身高*身高)},BMI,過重了
如果24>BMI>18,回傳:你的BMI是{(身高*身高)},BMI,正常
如果BMI<18,回傳:你的BMI是{(身高*身高)},BMI,太輕了

這三行看起來,{體重/(身高*身高}是不是很繞口?
其實乾脆點,寫BMI就看得懂了,
但我們因為小時候學過,所以看得懂BMI是什麼,
程式卻沒有學過,這時候我們需要告訴它BMI=體重/(身高*身高)。

這時BMI就是變數。
變數可以讓程式碼易讀易維護
不然通篇「體重/(身高*身高」看了頭都昏了,
再來,如果未來要改公式,我們就要改三次,
在其他專案中,甚至可能要改三百次,
但如果我們先宣告一個叫做BMI的變數,會等於體重/(身高*身高)
把程式寫成這樣:

{BMI}=體重/(身高*身高)
如果BMI>24,回傳:你的BMI是{BMI},BMI,過重了
如果24>BMI>18,回傳:你的BMI是{BMI},BMI,正常
如果BMI<18,回傳:你的BMI是{BMI},BMI,太輕了

之後如果要改公式,只要把{BMI}=體重/(身高*身高)這行改掉就好了!

在MYSQL的預存程序中,宣告變數的語法是:

1.DECLARE
2.變數名稱
3.型別;

接下來使用的時候直接寫變數名稱就可以了。
宣告變數後,我們要設定變數的值,設定的語法是

1.SET
2.變數名稱
3.=值

現在要設定BMI變數,值會是 體重參數/(身高參數/100*身高參數/100)

身高參數/100是因為預設台灣人身高會用公分計算,這裡要換算成公尺!

DELIMITER $$
CREATE PROCEDURE BMICompute (`height` int,`weight` int)

BEGIN
DECLARE BMI DECIMAL(5,2);
SET BMI=weight/((height/100)*height/100);
END
$$

目前我們該有的都有了,有身高體重,也換算成BMI,
接下來要輸出成果,
可以試著自己寫完囉!

程式邏輯
{BMI}=體重/(身高*身高)
如果BMI>24,回傳:你的BMI是{BMI},BMI,過重了
如果24>BMI>18,回傳:你的BMI是{BMI},BMI,正常
如果BMI<18,回傳:你的BMI是{BMI},BMI,太輕了

實際使用
身高:160
體重:50
回傳:你的BMI是19.53正常

提示
「如果」我們可以用IF或CASE。
SELECT出來的值會被回傳。
回傳部分因為是文字,加上計算,我們可以用CONCAT()組合。


上一篇
第二十八日-MYSQL預存程序 STORED PROCEDURE:來寫一個BMI小程式(1)
下一篇
第三十日與完賽心得-MYSQL預存程序 STORED PROCEDURE:來寫一個BMI小程式(3)
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言