天天看點

MySQL存儲過程

MySQL存儲過程和MSSQL的差別

1. MSSQL的關鍵字procedure可以縮寫為proc,而MySQL不能;

2. MySQL參數要申明是in、out還是inout,而MSSQL不用;

3. MySQL用CALL調用存儲過程,MSSQL用EXEC;

4. MySQL有輸出參數時要用變量@指派并查詢;

關鍵字參數、分頁

執行個體1:

mysql> create procedure cs_ro_getquestionlist
    -> (
    -> in b int,-- 起始位置
    -> in l int,-- 條數
    -> in kw nvarchar(100)-- 關鍵字
    -> )
    -> begin
    -> select id,title from w_question where locate(kw,title)>0 limit b,l;
    -> end;
mysql> call cs_ro_getquestionlist(0,10,'中國');      

含有輸入、輸出參數

執行個體2:

mysql> create procedure cs_ro_getquestionlist
    -> (
    -> in b int,-- 起始位置
    -> in l int,-- 條數
    -> in kw nvarchar(100),-- 關鍵字
    -> out t int-- 傳回總數
    -> )
    -> begin
    -> select count(1) into t from w_question where locate(kw,title)>0;
    -> select id,title from w_question where locate(kw,title)>0 limit b,l;
    -> end;
mysql> call cs_ro_getquestionlist(0,10,'中國',@a);
mysql> select @a;      

事務處理

執行個體3:

mysql> create procedure cs_px_addclass
    -> (
    -> in nid int,
    -> in nname nvarchar(20),
    -> in nQuestionNum int,
    -> in npx int,
    -> in npycode nvarchar(20)
    -> )
    -> begin
    -> DECLARE t_error INTEGER DEFAULT 0;
    -> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
    -> START TRANSACTION;-- 事務開始
    -> insert into w_questionclass(id,name,questionnum,px,pycode)
    -> VALUES (nid,nname,nquestionnum,npx,npycode);
    -> IF t_error = 1 THEN-- 如果失敗則復原
    -> ROLLBACK;
    -> ELSE
    -> COMMIT;-- 執行成功,事務結束
    -> END IF;
    -> select t_error;-- 将事務的執行狀态傳回給被調者
    -> end;
mysql> call cs_px_addclass(1,'測試',1,1,'cs');      

+--------+

| t_error|