当前位置:Gxlcms > mysql > MySQL存储过程的创建方案

MySQL存储过程的创建方案

时间:2021-07-01 10:21:17 帮助过:33人阅读

以下的文章主要介绍的是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 存储过程的介绍,望你能有所收获。

人气教程排行