欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL 存储过程的创建方案

程序员文章站 2024-01-12 13:28:10
...

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

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

创建MySQL 存储过程:

语法:

  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加上过程名以及一个括号

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

  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

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

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

所有的参数必须以@开头

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

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;

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

  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 存储过程的介绍,望你能有所收获。