第二十九日-MYSQL预存程序 STORED PROCEDURE:来写一个BMI小程序(2)

昨天已经认识分隔符号 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()组合。


<<:  二、教你怎麽看source code,找到核心程序码 ep.21:从train.py呼叫资料集处,一路看有关处理资料的程序,终於又可以回到train.py了

>>:  [影片]第28天:英雄指南-5. 新增应用内导航(3)

架站:Wordpress

为何选择Wordpress? 虽然内容管理系统(CMS)也有其他的选择(例如 Joomla!),但整...

Day 2 Convolutional Neural Network(CNN)

前言 昨天才刚讲完NN的缺点,今天就要先来介绍CNN,主要是CNN是图像辨识中一个很重要的突破,但是...

Day27 - this&Object Prototypes Ch3 Objects - Review

Obgect content Getter 与 Setter : 他们是 Object 内建的 p...

Windows Server 2019 英文语系更新至繁中

葛瑞部落格欢迎光顾 Windows Server 2019 语系更新手札 Windows设定 时间与...