mysql儲存過程小試牛刀
(1). 格式
MySQL儲存過程建立的格式:CREATE PROCEDURE 過程名 ([過程引數[,...]])
[特性 ...] 過程體
這裡先舉個例子:
mysql> DELIMITER //
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> 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). 引數
(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 ;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-2124574/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- mysql 儲存過程MySql儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- [MYSQL -23儲存過程]MySql儲存過程
- MYSQL儲存過程管理MySql儲存過程
- mysql儲存過程例子MySql儲存過程
- mysql的儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程
- 【Mysql】Mysql儲存過程學習MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql儲存過程案例解析MySql儲存過程
- mysql儲存過程詳解MySql儲存過程
- mysql儲存過程的修改MySql儲存過程
- MySQL儲存過程SAVEPOINT ROLLBACK toMySql儲存過程
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql 儲存過程和事件排程MySql儲存過程事件
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- MySQL 儲存過程和函式MySql儲存過程函式
- mysql儲存過程的引數MySql儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mysql 遊標的使用(儲存過程)MySql儲存過程
- MySQL 建立儲存過程報錯MySql儲存過程
- 用PHP呼叫MySQL儲存過程PHPMySql儲存過程
- mysql儲存過程宣告順序MySql儲存過程
- c / c + + 呼叫mysql儲存過程MySql儲存過程
- mysql儲存過程一例MySql儲存過程
- mySql 儲存過程與函式MySql儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql返回一個結果集的儲存過程小例子MySql儲存過程
- c#呼叫儲存過程小記C#儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- [原創]儲存過程效能測試儲存過程