MySQL 存储过程的创建方案

数据库 MySQL
我们今天主要向大家描述的是MySQL 存储过程的实际操作解析,如果你对其实际操作感兴趣的话,相信以下的文章会给你很大的帮助。

以下的文章主要介绍的是MySQL 存储过程的实际操作解析,我们大家都知道一个MySQL 存储过程主要包括名字,参数列表,还有包括很多的SQL语句与SQL语句集。以下就是具体内容的描述,

创建MySQL 存储过程:

语法:

 

CREATE PROCEDURE p()  
BEGIN 
  • 1.
  • 2.

 

/*此存储过程的正文*/

 

END  
CREATE PROCEDURE productpricing()  
BEGIN  
SELECT Avg(pro_price) AS priceaverage  
FROM products;  
END;  
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

begin…end之间是存储过程的主体定义

MySQL的分界符是分号(;)

 

调用存储过程的方法是:

 

CALL加上过程名以及一个括号

例如调用上面定义的MySQL 存储过程

 

CALL productpricing();  
  • 1.

 

哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的

 

删除存储过程的方法是:

DROP PROCUDURE productpricing; 
  • 1.

创建带参数的存储过程:

 

CREATE PROCUDURE productpricing(  
OUT p1 DECIMAL(8,2),  
OUT ph DECIMAL(8,2),  
OUT pa DECIMAL(8,2)  
)  
BEGIN  
SELECT Min(prod_price) INTO pl FROM products;  
SELECT Max(prod_price) INTO ph FROM products;   
SELECT Avg(prod_price) INTO pa FROM products;  
END;  
 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

DECIMAL用于指定参数的数据类型

OUT用于表明此值是用于从存储过程里输出的

 

MySQL支持 OUT, IN, INOUT

 

调用带参数的MySQL 存储过程:

CALL productpricing(@pricelow,  
@pricehigh,  
@priceaverage);  
  • 1.
  • 2.
  • 3.

 

所有的参数必须以@开头

 

要想获取@priceaverage的值,用以下语句

 

SELECT @priceaverage;

 

获取三个的值,用以下语句

 

 

SELECT @pricehigh, @pricelow, @priceaverage; 
  • 1.

 

另一个带IN和OUT参数的存储过程:

 

CREATE PROCEDURE ordertotal(  
IN onumber INT,  
OUT ototal DECIMAL(8,2)  
)  
BEGIN  
SELECT Sum(item_price*quantity)  
FROM orderitems  
WHERE order_num = onumber 
INTO ototal;  
END;  
CALL ordertotal(20005, @total);  
SELECT @total; 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

添加一个完整的例子:(这是一个自定义分页的MySQL 存储过程)

DELIMITER $$  
DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$  
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_page`(  
/**//*Table name*/  
tableName varchar(100),  
/**//*Fileds to display*/  
fieldsNames varchar(100),  
/**//*Page index*/  
pageIndex int,  
/**//*Page Size*/  
pageSize int,   
/**//*Field to sort*/  
sortName varchar(500),  
/**//*Condition*/  
strWhere varchar(500)  
)  
BEGIN   
DECLARE fieldlist varchar(200);   
if fieldsNames=''||fieldsNames=null THEN  
set fieldlist='*';  
else  
set fieldlist=fieldsNames;   
end if;  
if strWhere=''||strWhere=null then  
if sortName=''||sortName=null then   
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  
else  
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   
end if;  
else  
if sortName=''||sortName=null then  
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  
else  
set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   
end if;  
end if;   
PREPARE stmt1 FROM @strSQL;   
EXECUTE stmt1;  
DEALLOCATE PREPARE stmt1;  
END$$  
DELIMITER ;  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

 以上的相关内容就是对MySQL 存储过程的介绍,望你能有所收获。

【编辑推荐】

  1. MySQL查询优化的5个好用方法
  2. MySQL修改表字段的实际应用代码演示
  3. MySQL数据表中字段的批量修改与复制
  4. 恢复MySQL数据库root密码2方案
  5. MySQL root 密码破解好用方案介绍
责任编辑:佚名 来源: 互联网
相关推荐

2010-10-09 17:08:15

MySQL存储过程

2010-06-07 15:36:36

MySQL存储过程

2010-05-05 09:18:53

Oracle创建存储过

2010-06-02 14:23:01

MySQL 5.0

2010-04-21 17:19:29

Oracle创建

2010-10-28 13:53:13

ORACLE存储过程

2010-10-12 11:07:34

MySQL存储过程

2010-04-16 10:11:20

Oracle存储过程

2010-06-09 10:59:04

2010-06-04 19:57:09

2010-11-24 16:35:01

MYSQL命令行

2018-11-05 15:14:42

MySQL编程语言技术

2010-10-29 16:17:55

Oracle存储过程

2010-04-20 09:43:34

OracleDB2

2010-04-23 13:45:14

Oracle存储过程

2020-11-26 10:33:44

MySQL存储函数

2010-11-29 15:25:39

Sybase存储过程

2010-04-15 17:45:26

Oracle存储过程

2019-01-02 13:03:53

MySQL存储权限

2010-06-01 15:09:55

MySQL 存储过程
点赞
收藏

51CTO技术栈公众号