按照百度百科的介绍:存储过程(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 会出现一些问题
需要读者们自己去修改这个存储过程了。