1 CREATE PROCEDURE(創建)
CREATE PROCEDURE存儲過程名(參數列表) BEGIN
END |
注意:
由括號包圍的參數列必須總是存在。假設沒有參數,也該使用一個空參數列()。每一個參數默認都是一個IN參數。要指定為其他參數,可在參數名之前使用關鍵詞 OUT或INOUT
在 mysql client定義存儲過程的時候使用delimiter命令來把語句定界符從;變為//。
當使用delimiter命令時,你應該避免使用反斜杠(‘"’)字符,由于那是MySQL的轉義字符。
如:
mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
Query OK, 0 rows affected (0.00 sec) |
1.2 ALTER PROCEDURE(改動)
ALTER PROCEDURE存儲過程名SQL語句代碼塊 |
這個語句能夠被用來改變一個存儲程序的特征。
1.3 DROP PROCEDURE(刪除)
DROP PROCEDURE IF EXISTS存儲過程名 eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee存儲過程名) |
這個語句被用來移除一個存儲程序。不能在一個存儲過程中刪除還有一個存儲過程,僅僅能調用還有一個存儲過程
1.4 SHOW CREATE PROCEDURE(類似于SHOW CREATE TABLE,查看一個已存在的存儲過程)
SHOW CREATE PROCEDURE存儲過程名 |
1.5 SHOW PROCEDURE STATUS(列出全部的存儲過程)
SHOW PROCEDURE STATUS |
1.6 CALL語句(存儲過程的調用)
CALL存儲過程名(參數列表) |
CALL語句調用一個先前用CREATE PROCEDURE創建的程序。
CALL語句能夠用聲明為OUT或的INOUT參數的參數給它的調用者傳回值。
存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞
1.7 BEGIN ... END(復合語句)
[ begin_label :] BEGIN
END [end_label] |
存儲子程序能夠使用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語句的擴展版本號。 被參考變量可能是子程序內聲明的變量,或者是全局server變量。 在存儲程序中的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當前把參考解釋為一個變量的名字。
1.10 MySQL存儲過程參數類型(in、out、inout)
此小節內容來自:
參見地址:http://www.blogjava.net/nonels/archive/2009/04/22/233324.html
MySQL存儲過程參數(in)
MySQL存儲過程 “in”參數:跟 C語言的函數參數的值傳遞類似, MySQL存儲過程內部可能會改動此參數,但對 in類型參數的改動,對調用者(caller)來說是不可見的(not visible)。 |
MySQL存儲過程參數(out)
MySQL存儲過程 “out”參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,不管調用者是否給存儲過程參數設置值 |
MySQL存儲過程參數(inout)
MySQL存儲過程 inout參數跟 out類似,都能夠從存儲過程內部傳值給調用者。不同的是:調用者還能夠通過 inout參數傳遞值給存儲過程。 |
總結
假設只想把數據傳給 MySQL存儲過程,那就使用“in”類型參數;假設只從 MySQL存儲過程返回值,那就使用“out”類型參數;假設須要把數據傳給 MySQL存儲過程,還要經過一些計算后再傳回給我們,此時,要使用“inout”類型參數。 |
1.11 樣例:
1.1 創建存儲過程
帶(輸出參數)返回值的存儲過程:
--刪除存儲過程 DROP PROCEDURE IF EXISTS proc_employee_getCount --創建存儲過程 CREATE PROCEDURE proc_employee_getCount(out n int) BEGIN SELECT COUNT(*) FROM employee ; END --MYSQL調用存儲過程 CALL proc_employee_getCount(@n); |
帶輸入參數的存儲過程:
--刪除存儲過程 DROP PROCEDURE IF EXISTS proc_employee_findById; --創建存儲過程 CREATE PROCEDURE proc_employee_findById(in n int) BEGIN SELECT * FROM employee where id=n; END --定義變量 SET @n=1; --調用存儲過程 CALL proc_employee_findById(@n); |
操作存儲過程時應注意:
1. 刪除存儲過程時僅僅須要指定存儲過程名就可以,不帶括號;
2. 創建存儲過程時,無論該存儲過程有無參數,都須要帶括號;
3. 在使用SET定義變量時應遵循SET的語法規則;
SET @變量名=初始值;
4. 在定義存儲過程參數列表時,應注意參數名與數據庫中字段名差別開來,否則將出現無法預期的結果
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
