存儲過程和函數


 一、存儲過程和函數簡介

      存儲過程和函數是在數據庫中定義一些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

            http://wenku.baidu.com/view/740d51ef0975f46527d3e199.html?from=rec&pos=3&weight=27&lastweight=24&count=5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM