mysql 預存程序

來源:互聯網
上載者:User

標籤:style   http   使用   ar   資料   問題   sp   on   amp   

按照百度百科的介紹:預存程序(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 陳述式集,經編譯後儲存在資料庫中,使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。預存程序是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程式都應該用到預存程序。


mysql 中的預存程序的實現是在mysql 5.0 版本中引進的,下面簡單介紹mysql中的預存程序基本文法和使用場合。

DELIMITER // 
CREATE PROCEDURE GetAllProducts() 
BEGIN 
SELECT * FROM products; 
END // 
DELIMITER ; 

這裡建立了一個非常簡單的預存程序,名稱是GetAllProducts ,見名思意,就是得到所有產品。

執行預存程序也很簡單,就是CALL GetAllProducts()即可。begin 和 end 之間就是預存程序的具體操作。下面介紹預存程序的參數形式使用:

DELIMITER // 
CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255)) 
BEGIN 
SELECT city, phone 
FROM offices 
WHERE country = countryName; 
END // 
DELIMITER ;

通過輸入參數的傳入countryName我們可以通過country來得到這個國家城市對應的電話。


DELIMITER $$ 
CREATE PROCEDURE CountOrderByStatus( 
IN orderStatus VARCHAR(25), 
OUT total INT) 
BEGIN 
SELECT count(orderNumber) 
INTO total 
FROM orders 
WHERE status = orderStatus; 
END$$ 
DELIMITER ; 

這個預存程序不但有輸入參數,還有輸出參數,通過執行這個預存程序,我們就可以得到不同訂單狀態下的訂單數目,並且把這個值賦給索要傳遞的變數,這些只是簡單的預存程序。實際應用中,我們的預存程序可能一個就有幾百行,甚至上千行,它裡面完成了一系列操作。月底的時候,可能我們僅僅通過執行一個call BaoBiao();的預存程序,就把報表所需要的資料都傳遞賦值完成了。

DELIMITER $$

CREATE PROCEDURE `Capitalize`(INOUT str VARCHAR(1024)) 
BEGIN 
DECLARE i INT DEFAULT 1; 
DECLARE myc, pc CHAR(1); 
DECLARE outstr VARCHAR(1000) DEFAULT str; 
WHILE i <= CHAR_LENGTH(str) DO 
SET myc = SUBSTRING(str, i, 1); 
SET pc = CASE WHEN i = 1 THEN ‘ ‘ 
ELSE SUBSTRING(str, i - 1, 1) 
END; 
IF pc IN (‘ ‘, ‘&‘, ‘‘‘‘, ‘_‘, ‘?‘, ‘;‘, ‘:‘, ‘!‘, ‘,‘, ‘-‘, ‘/‘, ‘(‘, ‘.‘) THEN 
SET outstr = INSERT(outstr, i, 1, UPPER(myc)); 
END IF; 
SET i = i + 1; 
END WHILE; 
SET str = outstr; 
END$$ 

DELIMITER ; 


這個預存程序是把標準的語句中的首字母變成大寫:

比如:set @str = ‘this is a store‘;

CALL Capitalize($str);

select $str;

得到的語句是:This Is A Store


如果:set @str= ‘this is a store procedure& test!&abc‘;

CALL Capitalize($str);

select $str;

得到的語句是:  This Is A Store Procedure&tTst!&&Ac 會出現一些問題

需要讀者們自己去修改這個預存程序了。



 


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.