开发者社区> 余二五> 正文

MySQL存储过程中的语法学习

简介:
+关注继续查看

以下的文章主要介绍的是MySQL存储过程中的语法学习,主要内容包括名字,参数列表,与很多SQL语句的SQL语句集。以下就是具体方案的描述,希望会给你带来一些帮助在此学习方面。

一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。

创建存储过程:

 

语法:

 


  1. CREATE PROCEDURE p()  
  2. BEGIN  

 

此存储过程的正文

 


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

 

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

MySQL的分界符是分号(;)
 

 

调用存储过程的方法是:

 

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

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

 


  1. CALL productpricing();  

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

删除存储过程的方法是


  1. DROP PROCUDURE productpricing; 

创建带参数的存储过程:

 

 


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

 

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

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

MySQL支持 OUT, IN, INOUT
 

调用带参数的存储过程:

 

 


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

 

所有的参数必须以@开头

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

 


  1. SELECT @priceaverage; 

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


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

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

 

 


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

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

 


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

 

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










本文转自 yuanzhitang 51CTO博客,原文链接:http://blog.51cto.com/yuanzhitang/507525,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql存储过程必知必会
Mysql存储过程必知必会
63 0
mysql存储过程(三)
mysql存储过程(三)
41 0
MySQL存储过程详解
经常有小伙伴问我这个存储过程该如何写?作为过来人我刚开始也有这样的苦恼,今天就给大家说说这个存储过程该如何创建和使用。
99 0
mysql存储过程是什么
在mysql中,存储过程是一组为了完成特定功能的SQL语句集合。一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由SQL语句和一些特殊的控制结构组成。使用存储过程不仅可以提高数据库的访问效率,同时也可以提高数据库使用的安全性。
175 0
MySQL存储过程学习笔记
存储过程时数据库的一个重要的对象,可以封装SQL语句集,可以用来完成一些较复杂的业务逻辑,并且可以入参出参(类似于java中的方法的书写)。
102 0
MYSQL存储过程(二)
MYSQL存储过程语法结构:游标、handler
81 0
MySQL存储过程与函数(下)
MySQL存储过程与函数
70 0
MySQL存储过程与函数(上)
MySQL存储过程与函数
54 0
+关注
余二五
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
MySQL查询优化实战
立即下载
MySQL表和索引优化实战
立即下载
MySQL 开发规约实战
立即下载