mysql 存储过程

按照百度百科的介绍:存储过程(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 会出现一些问题

需要读者们自己去修改这个存储过程了。



 


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。