所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~
輸出參數 Output Parameters
使用參數可以為存儲過程傳遞值,我們還可以用參數給調用程式傳回值。
首先還是來建立一個新的過程,這次表格用中文,英文實在看着眼花。
建立的表格長這樣,然後查詢為payment_total為0 的值,比如id是5的
得出結果
這個時候,所有的存儲過程中,系數都是輸入參數,代表着隻有在給過程傳遞值的時候才可以使用他們。
那麼out代表輸出,我們隻要去前面添加out關鍵字的字首,就可以标記為輸出參數。這樣可以從過程中擷取這些值。
然後把這兩項插入,就是用into,添加在select後面
讀取資料,複制到輸出參數。
這個時候會報錯,
顯示的是這個内容。因為我又手滑把字打錯了!!!而且檢查了半天才發現,氣死了!!!
修改正确之後,打開是這個頁面
和EXCEL一樣,有3個參數,直接輸入id,得到這個頁面。
這裡定義了2個變量,發票計數和發票總計,這是使用者變量,變量就是我們用來存儲單一值的對象。用@符号做字首來定義變量,使用set語句,初始值為0,進行調用的時候,需要傳遞變量,第一參數是id,另外的參數就是先前定義的變量了。調用之後,用select,選擇語句來讀取,并在此顯示。
小結:真心不好用,學習的時候需要學,之後盡可能不用吧。
變量 Variables
一:定義使用者變量,使用SET語句定義使用者變量,并加上@字首。
使用變量的時候,一般在調用有輸出參數的存儲過程時。
傳遞變量,來擷取輸出的參數值。
變量在過程中會被儲存,如果斷線的話,就會被清空。是以稱為使用者或者會話變量。
即 User or seesion variables
二:本地變量 Local variables
在存儲過程和函數内定義的變量
本地變量不會在會話中儲存。如果我們的存儲過程完成執行任務,這些變量就被清光了。一般在存儲過程中執行計算任務。
打個比方
假設 風險因素=發票總計/發票計數*5
這個時候就可以使用本地變量了。首先在begin後面申明變量,使用declear,強調風險因素。然後規定一下是什麼類型的風險。
申明幾項中重要的細節。
然後寫選擇語句進行申明,還是先寫select,然後from
接着讀取這些值,并放入變量中,插入就是into語句,
插入的變量對應選擇的變量,注意細節,不要有錯誤,比如一些s的多或者少,from後面添加分号。
然後開始計算風險的值,用set
set risk_factor=invoices_total/invoices_count*5
最後再加一個select
select risk_factor;
以上。
本地變量隻有在存儲過程中才有意義。書寫代碼申明,就可以進行使用了。執行完過程之後,就可以被抹去了。
函數 Functions
之前已經說了很多簡單的内置函數,sum,MAX,min等聚合函數。還有日期函數和文本函數。
然後可以建立自己的函數了
過程類似于建立一個存儲過程。不同點是函數隻能傳回一個單一值,不能傳回多行多列的結果集。如果隻想傳回單一值,可以試試建立函數。
比如試試風險因素的計算
直接在左邊,右鍵就可以建立函數了
開頭的句子類似存儲過程,create後面跟着名字,然後是括号,括号中定義參數,比如客戶id。類型int,然後是returns語句,這個最明顯的不同。明确了函數傳回值的類型。可以是int,INTEGER,或者其他任何Mysql中的資料類型。
returns後跟着的是函數的屬性,每個Mysql有至少一個屬性
屬性
1 DETERMIN 确定性,如果我們給予這個函數同樣的一組值,它會永遠傳回一樣的值
現實中的應用場景,可以是計算發貨量,計算訂單量等,或者計算返現,比如返現是支付訂單的10%,寫上選擇語句,最後永遠需要傳回某個值。
2 READS SQL DATA
函數中會配置一些選擇語句,用以讀取一些資料。
3 MODIFIES SQL DATA
修改SQL資料,函數中有修改,更新或删除
屬性可以有多種,不隻一個
在這個案例中,一個人可能不隻一筆訂單,風險因素也會改變。使用選擇語句讀取資料,READS SQL DATA,不修改内容,是以不用MODIFIES SQL DATA
成功建立函數。然後就可以在選取語句中使用函數,就像内置函數一樣友善。
直接用
select *
風險(client_id)
from clients
其他約定 Other Conventions
其實就是一些細節,沒有固定規定的,注意入鄉随俗就好。