最近項目經理讓我給新的活動的預留一個插入紅包和查看詳情的sql,方便在項目出問題的做一些緊急操作,我想了下這里面還涉及到挺多邏輯和挺多表的一句句查也不方便啊,干脆寫到存儲過程里,於是開始在navicat寫存儲過程,因為是第一次寫,在此記錄一下,方便下次查看 (•̀ᴗ•́)و ̑̑。
1:選擇新建函數。
2:新建函數后會出現下面的界面,要是你不確定存儲過程的輸入輸出值,可以直接點擊完成,在里面的編輯的時候再加上這些參數,若是已經確定參數可以點擊下一步填寫相關參數。
3:如果上一步點擊的是下一步的話,就會出現下面的界面,各個參數的含義在界面右面的描述中有,其實用慣的也能猜出來,模式的命名也是見名知意的。
IN:存儲過程運行時需要輸入的參數,也就是入參。
OUT:儲存過程運行后的返回值,也就是出參。
INOUT:既是入參也是出參。
4:填完后點確認就會有下面的界面,navicat會給我們初識化好基本格式,如下:
5:現在我們就可以在begin和end直接編輯我們的語句,下面介紹存儲過程中常用的操作。
1):定義一個變量如下,使用 DECLARE修飾變量,后面跟變量名,變量的數據類型和大小;
DECLARE u1 bigint(20);
2):有了變量,我們就可以開始做賦值操作,先來個簡單的單個變量的賦值,如下直接使用SET變量名前使用@修飾,可以直接賦值也可以將入參賦值給變量,如下,將入參userId賦值給變量u1;
-
SET @u1 =
89893;
-
SET @u1 = userId;
3):我們還可以將查詢語句的結果賦值給變量如下,使用同單個變量的賦值類似,只需將查詢的查詢sql括起來就好了;
-
SET
-
@t1 = (
SELECT team_id
FROM t_team_member
WHERE user_id = @u1);
4):有了查詢的單列賦值,我們再說下多列賦值,如果查詢的返回值有多個列我們可以做如下的操縱,我們將查詢出來的結果team_id和id分別賦值給t1和m1變量,
上面的單列賦值用SET,多列賦值使用的是一個SELECT…… INTO 。
-
SELECT team_id,
id
INTO
-
@t1,@m1
-
FROM t_team_member
WHERE user_id = @u1;
5):說完了各種變量的賦值操作,我們還需要將結果返回,返回結果集的操作如下:SELECT @變量名 ( 變量名間用逗號分隔);
SELECT @max_effective_amount,@teamInvisitAmount
6):邏輯判斷時,在存儲過程中也能使用IF…… ELSE 格式為: IF(判斷的條件) THEN 滿足if條件做的操作 ELSE 不滿足if條件做的操作 END IF;
-
if(@invisitAmount>@max_effective_amount) THEN
-
SET @invisitAmount= @max_effective_amount;
-
end
if;
7):前面有說過一開始不確定入參和出參可以之后再編輯,編輯的參數的格式為: 【IN、OUT、INOUT】【參數名】 【參數的數據類型】,編寫完成后就可以點擊運行,
會彈出如下的輸入參數框,如果入參有多個參數的話,可以按順序用逗號分隔填入。

8):運行結果如下,允許有多個結果集,也就是多個SELECT 變量名 (多個變量中間用逗號分隔):
SELECT @u1,@newInvisit,@oldInvisit;
