国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL存儲過程即常用邏輯知識點總結

2020-01-18 20:43:14
字體:
來源:轉載
供稿:網友

Mysql存儲過程

1.創建存儲過程語法(格式)

DELIMITER $CREATE PROCEDURE 存儲過程名A(IN 傳入參數名a INT,IN 傳入參數名b VARCHAR(20),OUT 返回參數名c INT)BEGIN  內容..........END $

解析:

  • IN 代表傳入的參數,定義傳入參數名,并且后面跟上傳入參數類型(INT,VARCHAR,DOUBLE,........)
  • OUT 代表存儲過程執行完返回的數據,定義參數名,并且后面跟上參數類型(INT,VARCHAR,DOUBLE,........)
  • INOUT 代表既可以傳入也可以返回 ,定義參數名,并且后面跟上參數類型(INT,VARCHAR,DOUBLE,........)

2.存儲過程內具體語法與邏輯

A.定義變量語法:

DECLARE 變量名a 參數類型(INT,VARCHAR(20),BOOLEAN,........) [DEFAULT NULL];

注:可以在參數類型后面加 DEFAULT NULL; 來設置初始值。

B.變量賦值:

方式1(直接對變量進行賦值):

SET 定義的變量a = NEW();

方式2(sql查詢的結果直接賦值給變量):

SELECT `student`.age INTO 定義的變量a FROM `student` WHERE...........

方式3(sql查詢的結果直接賦值給多個變量):

SELECT `student`.name AS 定義的變量a,`student`.age AS 定義的變量b INTO 定義的變量a,定義的變量b FROM `student` ...............

c.邏輯判斷:

#IF判斷:          IF 條件語句(3>5) THEN         條件為TRUE時執行.........;      END IF;  #IF ELSE判斷:      IF 條件(a>0) THEN        條件為(a>0)時執行........;      ELSE IF 條件(a<0) THEN         條件為(a<0)時執行.......;      ELSE         其它執行.......;      END IF;

D.游標,(LOOP)循環:

#例.單游標循環:create procedure my_procedure() -- 創建存儲過程begin -- 開始存儲過程declare my_id varchar(32); -- 自定義變量1declare my_name varchar(50); -- 自定義變量2DECLARE done INT DEFAULT FALSE; -- 自定義控制游標循環變量,默認falseDECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標并輸入結果集DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標,游標循環結束自動轉true OPEN cur; -- 打開游標 posLoop: LOOP -- 開始循環體,myLoop為自定義循環名,結束循環時用到  FETCH cur into my_id, my_name; -- 將游標當前讀取行的數據順序賦予自定義變量12     IF done THEN -- 判斷是否繼續循環        LEAVE posLoop; -- 結束循環    END IF;  -- 自己要做的事情,在 sql 中直接使用自定義變量即可  UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右去空格   COMMIT; -- 提交事務 END LOOP posLoop; -- 結束自定義循環體 CLOSE cur; -- 關閉游標END; -- 結束存儲過程
#例.多游標循環:create procedure my_procedure() -- 創建存儲過程begin -- 開始存儲過程declare my_id varchar(32); -- 自定義變量1declare my_name varchar(50); -- 自定義變量2DECLARE done INT DEFAULT FALSE; -- 自定義控制游標循環變量,默認falseDECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標并輸入結果集DECLARE cur_2 CURSOR FOR ( SELECT id_2,name_2 FROM t_people_2); --定義游標并輸入結果集DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標,游標循環結束自動轉true OPEN cur_1; -- 打開游標 posLoop: LOOP -- 開始循環體,myLoop為自定義循環名,結束循環時用到  FETCH cur_1 into my_id, my_name; -- 將游標當前讀取行的數據順序賦予自定義變量12     IF done THEN -- 判斷是否繼續循環        LEAVE posLoop; -- 結束循環    END IF;  -- 自己要做的事情,在 sql 中直接使用自定義變量即可  UPDATE ..........;  --自己要做的具體操作 END LOOP posLoop; -- 結束自定義循環體 CLOSE cur_1; -- 關閉游標  SET done = FALSE;  -- 因為當第一個游標遍歷完后其值被handler設置為TRUE了,如果不用set把它設置為 FALSE ,那么第二個游標就不會遍歷了。(最好是在每個打開游標的操作前都用該語句,以確保游標能真正遍歷)  OPEN cur_2; -- 打開游標 posLoop_2: LOOP -- 開始循環體,myLoop為自定義循環名,結束循環時用到  FETCH cur_2 into my_id, my_name; -- 將游標當前讀取行的數據順序賦予自定義變量12     IF done THEN -- 判斷是否繼續循環        LEAVE posLoop_2; -- 結束循環    END IF;  -- 自己要做的事情,在 sql 中直接使用自定義變量即可  INSERT ..........;   --自己要做的具體操作 END LOOP posLoop_2; -- 結束自定義循環體 CLOSE cur_2; -- 關閉游標END; -- 結束存儲過程

3.存儲過程的調用

#調用沒有返回值的存儲過程CALL 存儲過程名(參數.....);#調用有返回值的存儲過程(獲得返回值)CALL 存儲過程名(@aaa);SELECT @aaa;

4.刪除存儲過程

DROP PROCEDURE 存儲過程名; 

5.注意事項

存儲過程中的分號(;)很重要,盡量不要省略。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江安县| 留坝县| 洛浦县| 夏邑县| 康保县| 双牌县| 邵阳市| 定兴县| 镇赉县| 随州市| 巴中市| 梓潼县| 浪卡子县| 沾化县| 灵丘县| 安新县| 盘山县| 乌什县| 得荣县| 怀远县| 藁城市| 安义县| 克山县| 清原| 祁东县| 冕宁县| 雷波县| 九龙坡区| 印江| 松潘县| 来凤县| 宜昌市| 桦甸市| 枞阳县| 元朗区| 沂源县| 拉萨市| 永宁县| 南开区| 大安市| 云和县|