1.一、什麼是存儲過程html
帶有邏輯的sql語句;帶有流程控制語句(if while)等等 的sql語句mysql
1.二、存儲過程的特色sql
1)執行效率很是快,存儲過程是數據庫的服務器端執行的。
2)移植性不好,不一樣數據庫的存儲過程是不能移植的。數據庫
-- 建立存儲過程
1 DELIMITER $ -- 聲明存儲過程的結束符 2 CREATE PROCEDURE pro_test() -- 建立存儲過程 存儲過程的名稱(參數列表) 3 BEGIN -- 開始
4 5 -- 這中間能夠寫多個sql語句 -- sql語句+流程控制等 6 7 END $ -- 結束 結束符
1 --執行存儲過程 2 CALL pro_test(); -- call存儲過程的名稱(參數)
1 -- 存儲過程名稱裏面的參數: 2 IN :表示輸入參數,能夠攜帶數據存儲過程當中 3 OUT:表示輸出參數,能夠從存儲過程當中返回結果 4 INOUT:表示輸入輸出參數,既能夠輸入功能,也可輸出功能
-- 刪除存儲過程 1 DROP PROCEDURE pro_test; -- 刪除存儲過程 存儲過程的名稱;
3.一、帶有參數的存儲過程 Java代碼調用存儲過程的方法:http://www.javashuo.com/article/p-gpsfuqrn-m.html服務器
1 -- 需求:傳入一個員工的id,查詢員工的信息 2 DELIMITER $ 3 CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 輸入參數; eid:傳入參數的名稱; int:傳入參數的類型 4 BEGIN 5 SELECT * FROM employee WHERE id = eid; 6 END $ 7 8 -- 調用 9 CALL pro_findByID(4)
調用pro_findByID() 後的結果圖編碼
3.二、帶有輸出參數的存儲過程spa
1 -- 帶有輸出參數的存儲過程 2 DELIMITER $ 3 CREATE PROCEDURE pro_test_out(OUT str VARCHAR(20)) -- out:輸出參數 4 BEGIN 5 -- 給參數賦值 6 SET str = 'helloMySQL'; 7 END $ 8 9 CALL pro_test_out(@NAME); -- 調用pro_test_out存儲過程 10 SELECT @NAME; -- 查詢pro_test_out存儲過程 11 12 -- 如何返回接收的返回數值 13 -- ****mysql的變量****** 14 -- 全局變量(內置變量):mysql數據庫中內置的變量(全部鏈接都起做用) 15 -- 查看全部的全局變量:show variables; 16 -- 查看某個全局變量:select @@變量名 17 -- 修改全局變量:set 變量名 = 新值 18 19 -- 會話變量:只存在於當前客戶端與數據庫的一次鏈接當中;若是斷開,那麼會話變量將所有失效(丟失)。 20 -- 定義會話變量: set @變量 = 值; 21 -- 查看會話變量: select @變量; 22 -- character_set_client: 服務器的接收編碼 23 -- character_set_results: 服務器的輸出編碼 24 25 -- 局部變量:在存儲過程當中使用的變量就叫局部變量;只要存儲過程執行完畢,局部變量就丟失。 26
結果圖3d
3.三、帶有輸入輸出參數的存儲過程code
1 -- 帶有輸入輸出參數的存儲過程 2 DELIMITER $ 3 CREATE PROCEDURE pro_test_InOut(INOUT n INT) -- INOUT: 輸入輸出參數 4 BEGIN 5 -- 查看變量 6 SELECT n; 7 SET n=500; 8 END $ 9 10 -- 調用 11 SET @n=10; 12 CALL pro_test_InOut(@n); 13 SELECT @n;
結果圖htm
3.四、帶有條件判斷存儲過程
1 -- 需求:輸入一個整數,若是是1,則返回'星期一';若是是2,則返回'星期二';若是是3,則返回'星期三'。若是是其餘,則返回'輸入有誤' 2 DELIMITER $ 3 CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(32)) 4 BEGIN 5 IF num=1 THEN 6 SET str = '星期一'; 7 ELSEIF num = 2 THEN 8 SET str = '星期二'; 9 ELSEIF num = 3 THEN 10 SET str = '星期三'; 11 ELSE 12 SET str = '輸入錯誤'; 13 END IF; 14 END $ 15 16 CALL pro_testIf(3,@str); 17 SELECT @str;
結果圖
3.五、帶有循環功能的存儲過程
1 -- 需求:輸入一個整數,求和。例如:輸入100 ,統計1~100的和 2 DELIMITER $ 3 CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT) 4 BEGIN 5 -- 定義一個局部變量 for(int i=1;i<=100;i++) 6 DECLARE i INT DEFAULT 1; -- 定義一個局部變量i,int類型,默認值爲1。 7 DECLARE vsum INT DEFAULT 0; -- 定義一個局部變量vsum,int類型,默認值爲0。 8 WHILE i <= num DO 9 SET vsum = vsum + i; 10 SET i = i + 1; 11 END WHILE; 12 SET result = vsum; 13 END $ 14 15 CALL pro_testWhile(100,@result); 16 SELECT @result;
結果圖
原創做者:DSHORE 做者主頁:http://www.cnblogs.com/dshore123/ 原文出自:http://www.javashuo.com/article/p-ookxqvxn-k.html 歡迎轉載,轉載務必說明出處。(若是本文對您有幫助,能夠點擊一下右下角的 推薦,或評論,謝謝!) |