存儲過程調用

1>MySQL存儲過程的調用


用call和你過程名以及一個括號,括號裏面根據需要,加入參數,參數包括輸入參數、輸出參數、輸入輸出參數。具體的調用方法可以參看上面的例子。


2>MySQL存儲過程的查詢


我們像知道一個數據庫下面有那些表,我們一般採用showtables;進行查看。那麼我們要查看某個數據庫下面的存儲過程,是否也可以採用呢?答案是,我們可以查看某個數據庫下面的存儲過程,但是是令一鍾方式。 
我們可以用 
selectname from mysql.proc where db=’數據庫名’; 
或者 
selectroutine_name from information_schema.routines where routine_schema=’數據庫名’; 
或者 
showprocedure status where db=’數據庫名’; 
進行查詢。 
如果我們想知道,某個存儲過程的詳細,那我們又該怎麼做呢?是不是也可以像操作表一樣用describe 表名進行查看呢? 
答案是:我們可以查看存儲過程的詳細,但是需要用另一種方法: 
SHOWCREATE PROCEDURE 數據庫.存儲過程名; 
就可以查看當前存儲過程的詳細。


3>MySQL存儲過程的修改


ALTER PROCEDURE 
更改用CREATE PROCEDURE 建立的預先指定的存儲過程,其不會影響相關存儲過程或存儲功能。


4>MySQL存儲過程的刪除


刪除一個存儲過程比較簡單,和刪除表一樣: 
DROPPROCEDURE 
從MySQL的表格中刪除一個或多個存儲過程。


5>MySQL存儲過程的控制語句


6>變量作用域



內部的變量在其作用域範圍內享有更高的優先權,當執行到end。變量時,內部變量消失,此時已經在其作用域外,變量不再可見了,應爲在存儲 
過程外再也不能找到這個申明的變量,但是你可以通過out參數或者將其值指派 
給會話變量來保存其值。


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc3()  
3.       -> begin 
4.       -> declare x1 varchar(5) default 'outer';  
5.       -> begin 
6.       -> declare x1 varchar(5) default 'inner';  
7.       -> select x1;  
8.       -> end;  
9.       -> select x1;  
10.     -> end;  
11.     -> //  
12.mysql > DELIMITER ;  


7>條件語句


if-then -else語句


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc2(IN parameter int)  
3.       -> begin 
4.       -> declare var int;  
5.       -> set var=parameter+1;  
6.       -> if var=0 then 
7.       -> insert into t values(17);  
8.       -> end if;  
9.       -> if parameter=0 then 
10.     -> update t set s1=s1+1;  
11.     -> else 
12.     -> update t set s1=s1+2;  
13.     -> end if;  
14.     -> end;  
15.     -> //  
16.mysql > DELIMITER ;  


8>case語句:


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc3 (in parameter int)  
3.       -> begin 
4.       -> declare var int;  
5.       -> set var=parameter+1;  
6.       -> case var  
7.       -> when 0 then   
8.       -> insert into t values(17);  
9.       -> when 1 then   
10.     -> insert into t values(18);  
11.     -> else   
12.     -> insert into t values(19);  
13.     -> end case;  
14.     -> end;  
15.     -> //  
16.mysql > DELIMITER ; 
case
        when var=0 then
               insert into t values(30);
        when var>0 then
        when var<0 then
        else


end case


9>循環語句


while ···· end while:


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc4()  
3.       -> begin 
4.       -> declare var int;  
5.       -> set var=0;  
6.       -> while var<6 do  
7.       -> insert into t values(var);  
8.       -> set var=var+1;  
9.       -> end while;  
10.     -> end;  
11.     -> //  
12.mysql > DELIMITER ; 
 while條件 do
--循環體
endwhile


repeat···· end repeat:


它在執行操作後檢查結果,而while則是執行前進行檢查。


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc5 ()  
3.       -> begin   
4.       -> declare v int;  
5.       -> set v=0;  
6.       -> repeat  
7.       -> insert into t values(v);  
8.       -> set v=v+1;  
9.       -> until v>=5  
10.     -> end repeat;  
11.     -> end;  
12.     -> //  
13.mysql > DELIMITER ;  
 repeat
--循環體
until循環條件     
endrepeat;


loop ·····endloop:


loop循環不需要初始條件,這點和while 循環相似,同時和repeat循環一樣不需要結束條件, leave語句的意義是離開循環。


1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc6 ()  
3.       -> begin 
4.       -> declare v int;  
5.       -> set v=0;  
6.       -> LOOP_LABLE:loop  
7.       -> insert into t values(v);  
8.       -> set v=v+1;  
9.       -> if v >=5 then 
10.     -> leave LOOP_LABLE;  
11.     -> end if;  
12.     -> end loop;  
13.     -> end;  
14.     -> //  
15.mysql > DELIMITER ;  


10>LABLES 標號:



標號可以用在begin repeat while 或者loop 語句前,語句標號只能在合法的語句前面使用。可以跳出循環,使運行指令達到複合語句的最後一步。


ITERATE迭代


ITERATE:


1.    通過引用複合語句的標號,來從新開始複合語句
2.  mysql > DELIMITER //  
3.  mysql > CREATE PROCEDURE proc10 ()  
4.       -> begin 
5.       -> declare v int;  
6.       -> set v=0;  
7.       -> LOOP_LABLE:loop  
8.      -> if v=3 then   
9.      -> set v=v+1;  
10.        -> ITERATE LOOP_LABLE;  
11.        -> end if;  
12.     -> insert into t values(v);  
13.     -> set v=v+1;  
14.        -> if v>=5 then 
15.        -> leave LOOP_LABLE;  
16.     -> end if;  
17.     -> end loop;  
18.     -> end;  
19.     -> //  
20.mysql > DELIMITER ; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章