您好,登錄后才能下訂單哦!
這篇文章主要講解了“mysql存儲過程舉例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql存儲過程舉例分析”吧!
(1).格式
MySQL存儲過程創建的格式:CREATE PROCEDURE過程名([過程參數[,...]])
[特性...]過程體
這里先舉個例子:
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> SELECT COUNT(*) INTO s FROM user;
-> END
-> //
mysql> DELIMITER ;
注:
(1)這里需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那么編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之后要把分隔符還原。
(2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
(3)過程體的開始與結束使用BEGIN與END進行標識。
這樣,我們的一個MySQL存儲過程就完成了,是不是很容易呢?看不懂也沒關系,接下來,我們詳細的講解。
(2).聲明分割符
其實,關于聲明分割符,上面的注解已經寫得很清楚,不需要多說,只是稍微要注意一點的是:如果是用MySQL的Administrator管理工具時,可以直接創建,不再需要聲明。
(3).參數
MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ]參數名數據類形...])
IN輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值
OUT輸出參數:該值可在存儲過程內部被改變,并可返回
INOUT輸入輸出參數:調用時指定,并且可被改變和返回
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)
--
-- 實例
-- MYSQL存儲過程名為:getUserInfo
-- 參數為:date_day日期格式:2008-03-08
--
BEGIN
declare _userName varchar(12); -- 用戶名
declare _chinese int ; -- 語文
declare _math int ; -- 數學
declare done int;
-- 定義游標
DECLARE rs_cursor CURSOR FOR SELECT username,chinese,math from userInfo where datediff(createDate, date_day)=0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; --結束語法
-- 獲取昨天的日期
if date_day is null then
set date_day = date_add(now(),interval -1 day);
end if;
open rs_cursor;
cursor_loop:loop ###固定語法,cusor_loop 是自己隨便起的名字
FETCH rs_cursor into _userName, _chinese, _math; -- 取數據
if done=1 then
leave cursor_loop;
end if;
-- 更新表
update infoSum set total=_chinese+_math where UserName=_userName;
end loop cursor_loop;
close rs_cursor;
END$$
DELIMITER ;
我寫的案例:
1.取出每條數據的總訪問量
DELIMITER $$
CREATE PROCEDURE test.get_data_lunzheng()
BEGIN
DECLARE loop_id INT;
DECLARE done INT DEFAULT 0;
DECLARE id_cursor CURSOR FOR SELECT id FROM test2.lunzheng;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN id_cursor;
select_loop: LOOP
FETCH id_cursor INTO loop_id;
IF done=1 THEN
LEAVE select_loop;
END IF;
SELECT info_id,COUNT(*) FROM (SELECT a.info_id,a.id FROM liuhe.`pvlogs_back_05_bak` a
WHERE a.info_id=loop_id UNION ALL SELECT b.info_id,b.id FROM liuwenhe.`pvlogs_back_08_bak` b WHERE b.info_id=loop_id) c GROUP BY info_id into outfile 'C:\Users\manet\Desktop\loop_id.txt' ;
END LOOP ;
CLOSE id_cursor;
END $$
DELIMITER ;
感謝各位的閱讀,以上就是“mysql存儲過程舉例分析”的內容了,經過本文的學習后,相信大家對mysql存儲過程舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。