Mysql存储过程与函数篇,创建存储过程
1、创建存储过程的语法结构
CREATE PROCEDURE sp_name([proc_parameter])
[characteristics..] routine body
2、CREATE PROCEDURE :创建存储过程的关键字
sp_name :存储过程名称
proc_parameter:参数列表
characteristic:存储过程特性
routine body SQL内容,BEGIN和END关键字表示SQL代码的开始与结

3、proc_parameter 参数列表 格式如下:
[IN | OUT | INOUT] param_name type
IN : 表示输入函数
OUT: 表示输出函数
INOUT: 输入输出都可

4、characteristic,存储过程特性,取值如下:
1.LANGUAGE SQL:说明 routine body部分是由SL语句组成的,当前系统支持的语言为SQL,SQL是 LANGUAGE特性的唯一值
2.[NOT] DETERMINISTIC:指明存储过程执行的结果是否确定。 DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是不确定的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为 NOT DETERMINISTIC
3.{ CONTAINS SQL| NO SQL| READS SQL DATA| MODIFIES SQL DATA}指
明子程序使用SL语句的限制。
CONTAINS SQL表明子程序包含SOL语句,但是不包含读写数据的语句;
NO SQL表明子程序不包含SQL语句;
READS SQL DATA说明子程序包含读数据的语句;
MODIFIES SQL DATA表明子程序包含写数据的语句。默认情况下,系统会指定为 CONTAINS SQL
4.SQL SECURITY{ DEFINER| INVOKER}:指明谁有权限来执行。DEFINER表示只有定义者才能执行。 INVOKER表示拥有权限的调用者可以执行。默认情况下,系统指定为DEFINER COMMENT' string:注释信息,可以用来描述存储过程或函数。

1、创建示例表
DROP TABLE IF EXISTS `test_9`;
CREATE TABLE `test_9` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fruits_name` varchar(50) DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
INSERT INTO `test_9` VALUES ('1', 'apple', '14.00');
INSERT INTO `test_9` VALUES ('2', 'orange', '12.00');
INSERT INTO `test_9` VALUES ('3', 'banana', '25.00');
INSERT INTO `test_9` VALUES ('4', 'watermelon', '5.00');
INSERT INTO `test_9` VALUES ('5', 'kiwifruit', '30.00');
INSERT INTO `test_9` VALUES ('6', 'hamimelon', '10.00');
INSERT INTO `test_9` VALUES ('7', 'pitaya', '15.00');
INSERT INTO `test_9` VALUES ('8', 'grape', '20.00');
INSERT INTO `test_9` VALUES ('9', 'cherry', '30.00');
INSERT INTO `test_9` VALUES ('10', 'guava', '10.00');

2、创建无参数的存储过程
CREATE PROCEDURE get_avg_price ()
BEGIN
SELECT
AVG(price) AS avg_price
FROM
test_9;
END;
调用一下
CALL get_avg_price();


3、3.创建带参数的存储过程
CREATE PROCEDURE get_sum_price (
IN fid INT,
OUT sum_price DECIMAL (10, 2)
)
BEGIN
SELECT
SUM(price) INTO sum_price FROM
test_9
WHERE id > fid;
END;
调用一下
CALL get_sum_price(3,@sum_price);
SELECT @sum_price;

