mysql 預存程序與儲存函數

來源:互聯網
上載者:User

標籤:系統預設   伺服器   min   不包含   執行預存程序   返回   string   rmi   cal   

第一節:預存程序和函數的引入

預存程序和函數是在資料庫中定義一些SQL 陳述式的集合,然後直接調用這些預存程序和函數來執行已經定義好
的SQL 陳述式。預存程序和函數可以避免開發人員重複的編寫相同的SQL 陳述式。而且,預存程序和函數是在MySQL
伺服器中儲存和執行的,可以減少用戶端和伺服器端的資料轉送;

 

第二節:建立預存程序和函數

2.1 建立預存程序

CREATE PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body
sp_name 參數是預存程序的名稱;
proc_parameter 表示預存程序的參數列表;
characteristic 參數指定預存程序的特性;
routine_body 參數是SQL 代碼的內容,可以用BEGIN...END 來標誌SQL 代碼的開始和結束。
proc_parameter 中的每個參數由3 部分組成。這3 部分分別是輸入輸出類型、參數名稱和參數類型。
[ IN | OUT | INOUT ] param_name type
其中,IN 表示輸入參數;OUT 表示輸出參數;INOUT 表示既可以是輸入,也可以是輸出;param_name 參數是
預存程序的參數名稱;type 參數指定預存程序的參數類型,該類型可以是MySQL 資料庫的任意資料類型;
Characteristic 參數有多個取值。其取值說明如下:
LANGUAGE SQL:說明routine_body 部分是由SQL 語言的語句組成,這也是資料庫系統預設的語言。
[ NOT ] DETERMINISTIC :指明預存程序的執行結果是否是確定的。DETERMINISTIC 表示結果是確定的。每
次執行預存程序時,相同的輸入會得到相同的輸出。NOT DETERMINISTIC 表示結果是非確定的,相同的輸入
可能得到不同的輸出。預設情況下,結果是非確定的。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } :指明子程式使用SQL 陳述式的限制;
CONTAINS SQL 表示子程式包含SQL 陳述式,但不包含讀或寫資料的語句;NO SQL 表示子程式中不包含SQL
語句;READS SQL DATA 表示子程式中包含讀資料的語句;MODIFIES SQL DATA 表示子程式中包含寫資料的
語句。預設情況下,系統會指定為CONTAINS SQL;
SQL SECURITY { DEFINER | INVOKER };指明誰有許可權來執行。DEFINER 表示只有定義者自己才能夠執行;
INVOKER 表示調用者可以執行。預設情況下,系統指定的許可權是DEFINER。
COMMENT ‘string’ :注釋資訊;

 

DELIMITER &&
CREATE PROCEDURE pro_book ( IN bT INT,OUT count_num INT)
   READS SQL DATA
   BEGIN
     SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
   END
   &&
DELIMITER ;

CALL pro_book(1,@total);

 

2.2 建立儲存函數

CREATE FUNCTION sp_name ( [func_parameter[,...]] )
RETURNS type
[ characteristic... ] routine_body
sp_name 參數是儲存函數的名稱;func_parameter 表示儲存函數的參數列表;RETURNS type 指定傳回值的
類型;characteristic 參數指定預存程序的特性,該參數的取值與預存程序中的取值是一樣的;routine_body 參數
是SQL 代碼的內容,可以用BEGIN...END 來標誌SQL 代碼的開始和結束;
func_parameter 可以由多個參數組成,其中每個參數由參數名稱和參數類型組成,其形式如下:
param_name type 其中,param_name 參數是儲存函數的參數名稱;type 參數指定儲存函數的參數類型,
該類型可以是MySQL 資料庫的任意資料類型;


DELIMITER &&
CREATE FUNCTION func_book (bookId INT)
 RETURNS VARCHAR(20)
 BEGIN
  RETURN ( SELECT bookName FROM t_book WHERE id=bookId );
 END
    &&
DELIMITER ;
SELECT func_book(2);

 

mysql 預存程序與儲存函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.