一、存儲過程和函數簡介
存儲過程和函數是在數據庫中定義一些SQL語句的集合,然后直接調用這些存儲過程和函數來執行已經定義好的SQL語句。存儲過程和函數可以避免開發人員重復的編寫相同的SQL語句。而且,存儲過程和函數是在MySQL服務器中存儲和執行的,可以減少客戶端和服務器端的數據傳輸。
二、MySQL存儲過程
一.創建存儲過程
create procedure sp_name()
begin
.........
end
二.調用存儲過程
1.基本語法:call sp_name()
注意:存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞
三.刪除存儲過程
1.基本語法:
drop procedure sp_name;
2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程
四.其他常用命令
1.show procedure status
顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等
2.show create procedure sp_name
顯示某一個mysql存儲過程的詳細信息
mysql存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT
Create procedure|function([[IN |OUT |INOUT ] 參數名 數據類形...])
IN 輸入參數
表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值
OUT 輸出參數
該值可在存儲過程內部被改變,並可返回
INOUT 輸入輸出參數
調用時指定,並且可被改變和返回
IN參數例子:
mysql>DELIMITER //
mysql>CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
->BEGIN
->SELECT p_in; /*查詢輸入參數*/
->SET p_in=2; /*修改*/
->select p_in; /*查看修改后的值*/
->END;
->//
mysql>DELIMITER ;
執行結果:
mysql> SET @p_in=1;
mysql> CALL sp_demo_in_parameter(@p_in);

mysql> SELECT @p_in;

以上可以看出,p_in雖然在存儲過程中被修改,但並不影響@p_in的值
OUT參數例子
創建:
mysql>DELIMITER //
mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
->BEGIN
->SELECT p_out; /*查看輸出參數*/
->SET p_out=2; /*修改參數值*/
->SELECT p_out; /*看看有否變化*/
->END;
->//
mysql>DELIMITER ;
執行結果:
mysql> SET @p_out=1;
mysql> CALL sp_demo_out_parameter(@p_out);

/*未被定義,返回NULL*/
mysql> SELECT @p_out;

INOUT參數例子:
mysql>DELIMITER //
mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
->BEGIN
->SELECT p_inout;
->SET p_inout=2;
->SELECT p_inout;
->END;
->//
mysql>DELIMITER ;
執行結果:
mysql>SET @p_inout=1;
mysql>CALL sp_demo_inout_parameter(@p_inout) ;

SELECT @p_inout;

附:函數庫
mysql存儲過程基本函數包括:字符串類型,數值類型,日期類型
一、字符串類
CHARSET(str) //返回字串字符集
CONCAT (string2 [,… ]) //連接字串
INSTR (string ,substring ) //返回substring首次在string中出現的位置,不存在返回0
LCASE (string2 ) //轉換成小寫
LEFT (string2 ,length ) //從string2中的左邊起取length個字符
LENGTH (string ) //string長度
LOAD_FILE (file_name ) //從文件讀取內容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定開始位置
LPAD (string2 ,length ,pad ) //重復用pad加在string開頭,直到字串長度為length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重復count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替換search_str
RPAD (string2 ,length ,pad) //在str后用pad補充,直到長度為length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比較兩字串大小,
SUBSTRING (str , position [,length ]) //從str的position開始,取length個字符,
注:mysql中處理字符串時,默認第一個字符下標為1,即參數position必須大於等於1
mysql> select substring(’abcd’,0,2);
+———————–+
| substring(’abcd’,0,2) |
+———————–+
| |
+———————–+
1 row in set (0.00 sec)
mysql> select substring(’abcd’,1,2);
+———————–+
| substring(’abcd’,1,2) |
+———————–+
| ab |
+———————–+
1 row in set (0.02 sec)
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //轉換成大寫
RIGHT(string2,length) //取string2最后length個字符
SPACE(count) //生成count個空格
參考鏈接:http://wenku.baidu.com/view/3b40ae3a376baf1ffc4fad8a.html
