技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
12
0
佛心分享-IT 人自學之術
從零開始的MySQL開發旅程
系列 第
12
篇
Day12 自訂函式、程序
16th鐵人賽
minhsiao
2024-08-30 23:58:43
189 瀏覽
分享至
函式function
定義:讓SQL陳述式呼叫,接受引數、參數或執行任務後一定會有一個回傳值,且該回傳值只能返回單一資料類型。
用途:執行比較小型的任務,例如取得資料、值格式化、數據處理或計算等
命名:以f_開頭
特性:必須有return陳述式因為函式必須回傳一值(procedure不會使用到return)
自訂函式:
當函式由多個select陳述式組成,且每個陳述式的結尾都是;時可以重新定義分隔符號(如//、$$)在開始到結束兩個陳述式之間遇到分號時不要做為結束標記
加入參數、回傳值
建立函式並定義其會接受一個參數(任何參數以_param結尾)與資料型態
使用關鍵字return讓MYSQL知道回傳值的資料型態
指定函式特性(procedure不需指定)
定義函式的屬性(也就是指定義函式有什特性)
必須要從以下兩組特性中選擇(各一)
deterministic或not deterministic
表示在相同引數或相同資料庫狀態下,選擇deterministic函式回傳值會一樣(定性)。選擇not deterministic則函式不一定會回傳相同的值
目的是助於查詢最佳化工具選擇最適合的方法或是至於持續追蹤異動情況
預設值為not deterministic
reads sql data、modifes sql data、contains sql或no sql
reads sql data表利用select從資料庫讀取資料但不會更新、插入、刪除資料
modifes sql data則會更新、插入、刪除資料
contains sql表函式中至少有一個select陳述式且該陳述是不會讀取或寫入資料
no sql表函式中沒有select陳述式。當函式回傳值節接寫在程式碼的數字就不會查詢資料庫才會使用no sql
預設值為contains sql
定義函式主體步驟
1.呼叫函式時要執行的程式碼
2.以begin、end陳述式表式起始、結束
3.以關鍵字declare宣告變數(變數用於保存資料值,以_var結尾)
4.加入select陳述式並且以關鍵字into將資料庫取出的值寫入變數
5.使用return陳述式,回傳宣告的變數回傳給函式呼叫者(必須有return陳述式且資料型態要相同)
6.end陳述式
程序procedure
定義:以call陳述式呼叫,不一定會有回傳值或是會回傳一個以上的值,程序是一組SQL語句集合,通常是用來執行一組操作的,例如插入、更新或刪除數據,或者多步計算。
用途:執行較複雜事務邏輯或多步驟的動作,例如重複執行的動作
命名:以p_開頭
定義區域變數、使用者變數
區域變數
在程序與函式中定義的變數,宣告時會用declare加上資料型態
只能在程序或式函式執行期間使用
使用者變數
以@作為開頭
單次session存在的整個期間都能用
不須指定資料型態
自訂程序加上邏輯陳述式
if陳述式
決策型陳述式
若為true則會值型特定的程式碼
end if為uf陳述式的結束標記
若要檢查更多條件可以使用elseif,若不符合第一個elseif就會跳下一個elseif,若是都不符合就會跳到else陳述式
case陳述式
一種撰寫複雜條件的陳述式寫法
以case開始,end case結束。當某一條件為true時會執行後跳到end case陳述式
可與when條件式做搭配
迴圈(loop)
重複執行部分程式碼
必須要設定結束條件來避免無限迴圈
loop迴圈
以命令loop、end loop標記圈的開始、結束
repeat迴圈
語法:repeat until
repeat、end repeat表起始與結束標記
while迴圈
必須要先滿足while命令的指定條件才會開始執行迴圈
資料列指標cursor
作用:一次只處理一列資料庫
步驟:
1.宣告cursor
2.開啟cursor
3.取得資料列
4.資料列是否都處裡完(還沒處裡完回到第三步驟)
5.處裡完資料列則關閉cursor
下一章:專題一 利用檢視表保護薪資資料(上)
留言
追蹤
檢舉
上一篇
Day11 建立檢視表、觸發器、事件
下一篇
Day13 專題一 利用檢視表保護薪資資料
系列文
從零開始的MySQL開發旅程
共
30
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
26
Day26 Firebase Cloud Functions
27
Day27 Firebase Hosting
28
Day28 Hosting 實作練習
29
Day29 Cloud Firestore 實作練習
30
Day30 總結
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22195
篇
完賽人數
600
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
請問內網IP如何轉外網IP?
兩端防火牆使用IPSEC互PING之問題
如何寫公式才能利用excel 觸發一個數據時傳送一個訊息給 自已的line呢?有沒有可以用其它方式,來取代line notify 的方法,因為line 開始收費
新手學習編程,哪種編程語言好?
Windows7升級Windows10後網路功能異常
python爬蟲 動態生成網頁104人力銀行
區域網路問題提問
vmware 虛擬機(windows)裡顯示使用容量與實際檔案容量不符合
防火牆與DNS請教
2台 Hyper-V 2008 R2 叢集主機(硬體規格相同), 如何加入一台新機? 謝謝.
熱門回答
請問內網IP如何轉外網IP?
新手學習編程,哪種編程語言好?
防火牆與DNS請教
Fortigate 50B 重置密碼
區域網路問題提問
熱門文章
每日一篇學習筆記 直到我做完專題 :( [Day32]
每日一篇學習筆記 直到我做完專題 :( [Day33]
每日一篇學習筆記 直到我做完專題 :( [Day34]
每日一篇學習筆記 直到我做完專題 :( [Day35]
隨時切換 WINDOWS 右鍵新舊版選單
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}