mysql 存储过程求和_MySQL - 存储过程和函数
MySQL - 存儲過程和函數
創建和調用存儲過程
-- 創建stu_group()存儲過程,封裝 分組查詢總成績,并按照總成績升序排序的功能
-- 注意: DELIMITER 必須寫在一行的最前面, 前面不能有空格####
DELIMITER $
CREATE PROCEDURE stu_group()
BEGIN
SELECT gender,SUM(score) getSum FROM student GROUP BY gender ORDER BY getSum ASC;
END$
DELIMITER ;
-- 調用stu_group()存儲過程
CALL stu_group();
查看和刪除存儲過程
-- 查看db6數據庫中所有的存儲過程
SELECT * FROM mysql.proc WHERE db='db6';
-- 刪除存儲過程
DROP PROCEDURE IF EXISTS stu_group;
變量
-- 定義一個int類型變量,并賦默認值為10
DELIMITER $
CREATE PROCEDURE pro_test1()
BEGIN
-- 定義變量
DECLARE num INT DEFAULT 10;
-- 使用變量
SELECT num;
END$
DELIMITER ;
-- 調用pro_test1存儲過程
CALL pro_test1();
-- 定義一個varchar類型變量并賦值
DELIMITER $
CREATE PROCEDURE pro_test2()
BEGIN
-- 定義變量
DECLARE NAME VARCHAR(10);
-- 為變量賦值
SET NAME = '存儲過程';
-- 使用變量
SELECT NAME;
END$
DELIMITER ;
-- 調用pro_test2存儲過程
CALL pro_test2();
-- 定義兩個int變量,用于存儲男女同學的總分數
DELIMITER $
CREATE PROCEDURE pro_test3()
BEGIN
-- 定義兩個變量
DECLARE men,women INT;
-- 查詢男同學的總分數,為men賦值
SELECT SUM(score) INTO men FROM student WHERE gender='男';
-- 查詢女同學的總分數,為women賦值
SELECT SUM(score) INTO women FROM student WHERE gender='女';
-- 使用變量
SELECT men,women;
END$
DELIMITER ;
-- 調用pro_test3存儲過程
CALL pro_test3();
-- SET方式實現
DELIMITER $
CREATE PROCEDURE pro_test3()
BEGIN
-- 定義兩個變量
DECLARE men,women INT;
-- 查詢男同學的總分數,為men賦值
SET men = (SELECT SUM(score) FROM student WHERE gender='男');
-- 查詢女同學的總分數,為women賦值
SET women = (SELECT SUM(score) FROM student WHERE gender='女');
-- 使用變量
SELECT men,women;
END$
DELIMITER ;
-- 調用pro_test3存儲過程
CALL pro_test3();
if語句
/*
if語句
IF 判斷條件1 THEN 執行的sql語句1;
[ELSEIF 判斷條件2 THEN 執行的sql語句2;]
...
[ELSE 執行的sql語句n;]
END IF;
*/
/*
定義一個int變量,用于存儲班級總成績
定義一個varchar變量,用于存儲分數描述
根據總成績判斷:
380分及以上 學習優秀
320 ~ 380 學習不錯
320以下 學習一般
*/
DELIMITER $
CREATE PROCEDURE pro_test4()
BEGIN
-- 定義變量
DECLARE total INT;
DECLARE info VARCHAR(10);
-- 查詢總成績,為total賦值
SELECT SUM(score) INTO total FROM student;
-- 對總成績判斷
IF total > 380 THEN
SET info = '學習優秀';
ELSEIF total >= 320 AND total <= 380 THEN
SET info = '學習不錯';
ELSE
SET info = '學習一般';
END IF;
-- 查詢總成績和描述信息
SELECT total,info;
END$
DELIMITER ;
-- 調用pro_test4存儲過程
CALL pro_test4();
參數傳遞
/*
參數傳遞
CREATE PROCEDURE 存儲過程名稱([IN|OUT|INOUT] 參數名 數據類型)
BEGIN
SQL 語句列表;
END$
IN:代表輸入參數,需要由調用者傳遞實際數據(默認)
OUT:代表輸出參數,該參數可以作為返回值
INOUT:代表既可以作為輸入參數,也可以作為輸出參數
也可以不指定輸入輸出類型.
*/
/*
輸入總成績變量,代表學生總成績
輸出分數描述變量,代表學生總成績的描述信息
根據總成績判斷:
380分及以上 學習優秀
320 ~ 380 學習不錯
320以下 學習一般
*/
DELIMITER $
CREATE PROCEDURE pro_test5(IN total INT,OUT info VARCHAR(10))
BEGIN
-- 對總成績判斷
IF total > 380 THEN
SET info = '學習優秀';
ELSEIF total >= 320 AND total <= 380 THEN
SET info = '學習不錯';
ELSE
SET info = '學習一般';
END IF;
END$
DELIMITER ;
-- 調用pro_test5存儲過程 , @將返回數據存儲到會話的info變量中
CALL pro_test5(350,@info);
CALL pro_test5((SELECT SUM(score) FROM student),@info);
SELECT @info;
while循環
/*
while循環
初始化語句;
WHILE 條件判斷語句 DO
循環體語句;
條件控制語句;
END WHILE;
*/
-- 計算1~100之間的偶數和
DELIMITER $
CREATE PROCEDURE pro_test6()
BEGIN
-- 定義求和變量
DECLARE result INT DEFAULT 0;
-- 定義初始化變量
DECLARE num INT DEFAULT 1;
-- while循環
WHILE num <= 100 DO
IF num % 2 = 0 THEN
SET result = result + num;
END IF;
SET num = num + 1;
END WHILE;
-- 查詢求和結果
SELECT result;
END$
DELIMITER ;
-- 調用pro_test6存儲過程
CALL pro_test6();
存儲函數
/*
創建存儲函數
CREATE FUNCTION 函數名稱([參數 數據類型])
RETURNS 返回值類型
BEGIN
執行的sql語句;
RETURN 結果;
END$
*/
-- 定義存儲函數,獲取學生表中成績大于95分的學生數量
DELIMITER $
CREATE FUNCTION fun_test1()
RETURNS INT
BEGIN
-- 定義變量
DECLARE s_count INT;
-- 查詢成績大于95分的數量,為s_count賦值
SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;
-- 返回統計結果
RETURN s_count;
END$
DELIMITER ;
/*
調用函數
SELECT 函數名稱(實際參數);
*/
-- 調用函數
SELECT fun_test1();
/*
刪除函數
DROP FUNCTION 函數名稱;
*/
-- 刪除函數
DROP FUNCTION fun_test1;
總結
以上是生活随笔為你收集整理的mysql 存储过程求和_MySQL - 存储过程和函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (linux与qt)
- 下一篇: mysql 如何凭借几个列_我如何总结M