天天看點

SQL第30課~輸出參數,變量和函數+Other Conventions

作者:小餅幹筆記

所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~

輸出參數 Output Parameters

SQL第30課~輸出參數,變量和函數+Other Conventions

使用參數可以為存儲過程傳遞值,我們還可以用參數給調用程式傳回值。

首先還是來建立一個新的過程,這次表格用中文,英文實在看着眼花。

建立的表格長這樣,然後查詢為payment_total為0 的值,比如id是5的

SQL第30課~輸出參數,變量和函數+Other Conventions

得出結果

SQL第30課~輸出參數,變量和函數+Other Conventions

這個時候,所有的存儲過程中,系數都是輸入參數,代表着隻有在給過程傳遞值的時候才可以使用他們。

那麼out代表輸出,我們隻要去前面添加out關鍵字的字首,就可以标記為輸出參數。這樣可以從過程中擷取這些值。

然後把這兩項插入,就是用into,添加在select後面

讀取資料,複制到輸出參數。

這個時候會報錯,

SQL第30課~輸出參數,變量和函數+Other Conventions

顯示的是這個内容。因為我又手滑把字打錯了!!!而且檢查了半天才發現,氣死了!!!

SQL第30課~輸出參數,變量和函數+Other Conventions

修改正确之後,打開是這個頁面

SQL第30課~輸出參數,變量和函數+Other Conventions

和EXCEL一樣,有3個參數,直接輸入id,得到這個頁面。

SQL第30課~輸出參數,變量和函數+Other Conventions

這裡定義了2個變量,發票計數和發票總計,這是使用者變量,變量就是我們用來存儲單一值的對象。用@符号做字首來定義變量,使用set語句,初始值為0,進行調用的時候,需要傳遞變量,第一參數是id,另外的參數就是先前定義的變量了。調用之後,用select,選擇語句來讀取,并在此顯示。

小結:真心不好用,學習的時候需要學,之後盡可能不用吧。

變量 Variables

一:定義使用者變量,使用SET語句定義使用者變量,并加上@字首。

使用變量的時候,一般在調用有輸出參數的存儲過程時。

傳遞變量,來擷取輸出的參數值。

變量在過程中會被儲存,如果斷線的話,就會被清空。是以稱為使用者或者會話變量。

即 User or seesion variables

二:本地變量 Local variables

在存儲過程和函數内定義的變量

本地變量不會在會話中儲存。如果我們的存儲過程完成執行任務,這些變量就被清光了。一般在存儲過程中執行計算任務。

打個比方

假設 風險因素=發票總計/發票計數*5

SQL第30課~輸出參數,變量和函數+Other Conventions

這個時候就可以使用本地變量了。首先在begin後面申明變量,使用declear,強調風險因素。然後規定一下是什麼類型的風險。

申明幾項中重要的細節。

SQL第30課~輸出參數,變量和函數+Other Conventions

然後寫選擇語句進行申明,還是先寫select,然後from

接着讀取這些值,并放入變量中,插入就是into語句,

插入的變量對應選擇的變量,注意細節,不要有錯誤,比如一些s的多或者少,from後面添加分号。

SQL第30課~輸出參數,變量和函數+Other Conventions

然後開始計算風險的值,用set

set risk_factor=invoices_total/invoices_count*5

最後再加一個select

select risk_factor;

以上。

本地變量隻有在存儲過程中才有意義。書寫代碼申明,就可以進行使用了。執行完過程之後,就可以被抹去了。

函數 Functions

之前已經說了很多簡單的内置函數,sum,MAX,min等聚合函數。還有日期函數和文本函數。

然後可以建立自己的函數了

過程類似于建立一個存儲過程。不同點是函數隻能傳回一個單一值,不能傳回多行多列的結果集。如果隻想傳回單一值,可以試試建立函數。

比如試試風險因素的計算

直接在左邊,右鍵就可以建立函數了

SQL第30課~輸出參數,變量和函數+Other Conventions

開頭的句子類似存儲過程,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

SQL第30課~輸出參數,變量和函數+Other Conventions
SQL第30課~輸出參數,變量和函數+Other Conventions

成功建立函數。然後就可以在選取語句中使用函數,就像内置函數一樣友善。

SQL第30課~輸出參數,變量和函數+Other Conventions

直接用

select *

風險(client_id)

from clients

其他約定 Other Conventions

其實就是一些細節,沒有固定規定的,注意入鄉随俗就好。