MySQL存储过程中的文法学习

  • 内容
  • 评论
  • 相关

mysql存储过程中的语法学习

一个存储过程包括名字,参数列表,以及可以包括很多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存储过程中的文法学习

微信支付二维码

微信 赏一包辣条吧~

支付宝支付二维码

支付宝 赏一听可乐吧~

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注