一.創建存儲過程
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 = "調用myproce2的存儲過程,看不到效果,可以在cmd下看到結果。
實例三:傳出參數的存儲過程
代碼如下 復制代碼 $sql = "實例四:傳出參數的inout存儲過程
代碼如下 復制代碼 $sql = "調用myproce4的存儲過程,在cmd下面看效果