萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql5存儲過程入門創建,刪除,調用詳解

mysql5存儲過程入門創建,刪除,調用詳解

本文章來給大家介紹我在使用mysql存儲過程中(創建,刪除,調用)的一些學習筆記,有需要學習存儲過程的同學可進入參考。

一.創建存儲過程
1.基本語法:
create procedure sp_name()
begin
.........
end

 

2.參數傳遞


二.調用存儲過程

1.基本語法:call sp_name()

 CALL語句(存儲過程的調用)
CALL 存儲過程名(參數列表)
 

CALL語句調用一個先前用CREATE PROCEDURE創建的程序。
CALL語句可以用聲明為OUT或的INOUT參數的參數給它的調用者傳回值。
存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞


注意:存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞


三.刪除存儲過程

1.基本語法:


DROP PROCEDURE  IF  EXISTS存儲過程名

eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee 存儲過程名)

這個語句被用來移除一個存儲程序。不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程


2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程


四.區塊,條件,循環

1.區塊定義,常用
begin
......
end;
也可以給區塊起別名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出區塊,執行區塊以後的代碼
2.條件語句
if 條件 then
statement
else
statement
end if;


3.循環語句

(1).while循環
[label:] WHILE expression DO

statements

END WHILE [label] ;


(2).loop循環
[label:] LOOP

statements

END LOOP [label];


(3).repeat until循環
[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;

五.其他常用命令
1.show procedure status
顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等
2.show create procedure sp_name
顯示某一個存儲過程的詳細信息

 


存儲子程序可以使用BEGIN ... END復合語句來包含多個語句。

statement_list 代表一個或多個語句的列表。statement_list之內每個語句都必須用分號(;)來結尾。

復合語句可以被標記。除非begin_label存在,否則end_label不能被給出,並且如果二者都存在,他們必須是同樣的。

1.8         DECLARE語句(用來聲明局部變量)
DECLARE語句被用來把不同項目局域到一個子程序:局部變量

DECLARE僅被用在BEGIN ... END復合語句裡,並且必須在復合語句的開頭,在任何其它語句之前。

1.9         存儲程序中的變量
1.1             DECLARE局部變量

DECLARE var_name[,...] type [DEFAULT value]
這個語句被用來聲明局部變量。
要給變量提供一個默認值,請包含一個DEFAULT子句。
值可以被指定為一個表達式,不需要為一個常數。
如果沒有DEFAULT子句,初始值為NULL。
局部變量的作用范圍在它被聲明的BEGIN ... END塊內。
它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。
 

1.2             變量SET語句

SET var_name = expr [, var_name = expr]
在存儲程序中的SET語句是一般SET語句的擴展版本。
被參考變量可能是子程序內聲明的變量,或者是全局服務器變量。
在存儲程序中的SET語句作為預先存在的SET語法的一部分來實現。這允許SET a=x, b=y, ...這樣的擴展語法。
其中不同的變量類型(局域聲明變量及全局和集體變量)可以被混合起來。
這也允許把局部變量和一些只對系統變量有意義的選項合並起來。
 

1.3             SELECT ... INTO語句

SELECT col_name[,...] INTO var_name[,...] table_expr
這個SELECT語法把選定的列直接存儲到變量。
因此,只有單一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用戶變量名在MySQL 5.1中是對大小寫不敏感的。
 

重要: SQL變量名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,並包含一個與列相同名字的局部變量,MySQL當前把參考解釋為一個變量的名字。


PHP 調用 MySQL 存儲過程 .


實例一:無參的存儲過程

 代碼如下 復制代碼

$conn = mysql_connect('localhost','root','root') or die ("數據連接錯誤!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end;
";
mysql_query($sql);//創建一個myproce的存儲過程

$sql = "call test.myproce();";
mysql_query($sql);//

調用myproce的存儲過程,則數據庫中將增加一條新記錄。

實例二:傳入參數的存儲過程

 代碼如下 復制代碼 $sql = "
create procedure myproce2(in score int)
begin
if score >= 60 then
select 'pass';
else
select 'no';
end if;
end;
";
mysql_query($sql);//創建一個myproce2的存儲過程
$sql = "call test.myproce2(70);";
mysql_query($sql);//

調用myproce2的存儲過程,看不到效果,可以在cmd下看到結果。

實例三:傳出參數的存儲過程

 代碼如下 復制代碼 $sql = "
create procedure myproce3(out score int)
begin
set score=100;
end;
";
mysql_query($sql);//創建一個myproce3的存儲過程
$sql = "call test.myproce3(@score);";
mysql_query($sql);//調用myproce3的存儲過程
$result = mysql_query('select @score;');
$array = mysql_fetch_array($result);
echo '<pre>';print_r($array);

實例四:傳出參數的inout存儲過程

 代碼如下 復制代碼 $sql = "
create procedure myproce4(inout sexflag int)
begin
SELECT * FROM user WHERE sex = sexflag;
end;
";
mysql_query($sql);//創建一個myproce4的存儲過程
$sql = "set @sexflag = 1";
mysql_query($sql);//設置性別參數為1
$sql = "call test.myproce4(@sexflag);";
mysql_query($sql);//

調用myproce4的存儲過程,在cmd下面看效果

copyright © 萬盛學電腦網 all rights reserved