標籤:
5.1什麼是預存程序
帶有邏輯的sql語句
之前的sql沒有條件判斷,沒有迴圈
預存程序帶上流程式控制制語句(if while)
5.2預存程序的特點
1) 執行效率非常快!預存程序在資料庫服務端執行
2) 移值性很差,不同資料庫不能一直
文法:
DELIMITER $ --聲明結束符號CREATE PROCEDURE pro_test()BEGIN --可寫多個sql語句 SELECT × FROM employee;END $
-- 執行預存程序
CALL pro_test();
參數
帶有輸入參數的預存程序
--需求傳入一個員工的id,查詢員工資訊
//帶有輸入參數的預存程序
DELIMITER $
CREATE PROCEDURE pro_findById(IN eid INT) --IN傳入參數
BEGIN
SELECT* FROM emplotee WHERE id = eid;
END $
---調用
CALL pro_findById(4);
---帶有輸出參數的預存程序
DELIMITER $
CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) --OUT:輸出參數
BEGIN
SET str = "這是一個輸出參數"
END $
--刪除預存程序
drop PROCEDURE pro_testOut;
--如何接受返回參數的值
--mysql全域變數
參看所有全域變數
--show variables
模糊查詢全域變數
--show variables like "character_%"
接受資料編碼設定
--character_set_client;
輸出資料編碼設定
--character_set_results;
×××會話變數---只存在於當前用戶端與伺服器端的一次串連當中,如果連結斷開,那麼會話變數全部消失
定義一個會話的變數
SET @NAME =‘eric‘
查看會話變數
select @NAME;
×××局部變數,只要預存程序執行完畢,局部變數就丟失
×××1)定義一個會話變數name,2)使用name會話
CALL pro_testOut(@NAME);
***帶有輸入輸出參數的預存程序
DELIMITER $
CREATE PROCEDURE pro_testInuut(INOUT n INT)
BEGIN
SELECT n;
SET n = 500;
END$
--帶有條件判斷的預存程序
DELIMITER $
CREATE PROCEFURE pro_testIf(IN num INT , OUT str VARCHAR(20))
BEGIN
IF num = 1 THEN
SET str="星期一";
ELSEIF num = 2 THEN
SET str="星期二";
ELSE
SET str="輸入有錯誤"
END IF;
END$
CALL pro_testIf(1,@str)
SELECT @ str;
**帶有迴圈過程的預存程序
DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT , OUT result INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE vsum INT DEFAULT 0;
WHILE i < =num DO
SET vsum = vsum + i;
i = i +1;
END WHILE;
SET result = vsum;
END $
使用查詢的結果作為傳回值
DELIMITER $
CRETAE PROCEDURE pro_findById(IN eid INT, OUT vname VARCHAR(20))
BEGIN
SELECT empName INTO vname FROM employee WHERE id = eid;
END $
mysql-(五)-預存程序