码迷,mamicode.com
首页 > 数据库 > 详细

MySQL存储过程(1) 语法学习

时间:2015-07-07 16:13:33      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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

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

创建存储过程:

 

语法:

CREATE PROCEDURE p()

 BEGIN

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

 END

CREATE PROCEDURE productpricing()

 BEGIN

   SELECT Avg(pro_price) AS priceaverage

   FROM products;

 END;

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

# mysql的分界符是分号(;)

 

 

 

 

调用存储过程的方法是:

 

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

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

CALL productpricing();

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

 


 

删除存储过程的方法是:
DROP PROCUDURE productpricing;

 

 

创建带参数的存储过程:

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;

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

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

# MySQL支持 OUT, IN, INOUT

 

 

 

调用带参数的存储过程:

CALL productpricing(@pricelow,

                    @pricehigh,

                    @priceaverage); 

# 所有的参数必须以@开头

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

SELECT @priceaverage;

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

SELECT @pricehigh, @pricelow, @priceaverage;

 


另一个带INOUT参数的存储过程:

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;

 

 

 


 添加一个完整的例子:(这是一个自定义分页的存储过程)
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 ;

 

MySQL存储过程(1) 语法学习

标签:

原文地址:http://www.cnblogs.com/sunscheung/p/4626946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!