我們在處理資料時,很常遇到一個情況:每天要撈差不多的東西!
每天要下的指令其實大同小異,只是輸入日期不同,
像這種重複性很高的事情,
通常會寫一支預存程序處理,
除了可以節省我們語法貼來貼去的時間,還能加快一點處理速度。
建立預存程序的時候,MYSQL會先把我們下的語法編譯一次,
之後每次呼叫預存程序,MYSQL都不用再編譯,
就像是我們看外文書,
我們第一次看的時候,好好做中文筆記(編譯),之後再看就可以對照筆記,
不用每次看時都要重新用GOOGLE翻譯。
寫預存程序會提到下面幾個概念:
我們一步步認識這些概念,寫出輸入身高和體重後,可以計算出BMI的小程序。
我們之前有提到「;」對MYSQL而言,相當於逗號,
也就是MYSQL看到「;」,便會認為「這個句子結束了」,
然而,有時後我們可能需要一個段落一起執行,
而不是單句、單句分別執行。
例如我們如果寫一個小段落:
「今天天氣很好,很適合出去玩;但正要出門的時候就下雨了,所以待在家看電視;」
MYSQL可能讀取到 「今天天氣很好,很適合出去玩;」 便以為語法結束了,
於是理解成今天適合出去玩,
但事實上我們的結論是「下雨了,待在家看電視」。
防止這種狀況的方法便是使用分隔符號 DELIMITER。
MYSQL會在讀取到DELIMITER時,才結束讀取語法。
DELIMITER使用方法是
DELIMITER $$
像這樣設定之後,我們可以把文章改成
「今天天氣很好,很適合出去玩;但正要出門的時候就下雨了,所以待在家看電視$$」
MYSQL就會把整段讀取完。
STORED PROCEDURE預存程序通常會是一整段語法,
我們會先設定分隔符號,確保預存程序整段被執行。
DELIMITER $$
接下來加上建立預存程序的語法,預存程序語法會CREATE PROCEDURE開始,
幫預存程序命名後,會填入參數,以及參數的型別,
再用BEGIN和END把中間的語法包起來,
最後輸入剛剛設定的分隔符號,
告訴MYSQL要從第一行執行到分隔符號這裡。
DELIMITER $$
CREATE PROCEDURE [SP名稱] ([參數名稱1] [型別1],[參數名稱2] [型別2])
BEGIN
[程式邏輯放這裡]
END
$$
明天再解釋參數是什麼,程式邏輯部分可以先想想,
之前介紹的IF寫法要怎麼寫,試著先用中文出來,
例如:
BMI=體重/(身高乘身高)
IF BMI小於18 顯示過輕
寫出來後再翻成語法看看,明天介紹囉!