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

创建MySQL 存储过程:

语法:

    CREATEPROCEDUREp() BEGIN

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

    END CREATEPROCEDUREproductpricing() BEGIN SELECTAvg(pro_price)ASpriceaverage FROMproducts; END;

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

MySQL的分界符是分号(;)

调用存储过程的方法是:

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

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

    CALLproductpricing();

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

删除存储过程的方法是:

    DROPPROCUDUREproductpricing;

创建带参数的存储过程:

    CREATEPROCUDUREproductpricing( OUTp1DECIMAL(8,2), OUTphDECIMAL(8,2), OUTpaDECIMAL(8,2) ) BEGIN SELECTMin(prod_price)INTOplFROMproducts; SELECTMax(prod_price)INTOphFROMproducts; SELECTAvg(prod_price)INTOpaFROMproducts; END;

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

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

MySQL支持 OUT, IN, INOUT

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

    CALLproductpricing(@pricelow, @pricehigh, @priceaverage);

所有的参数必须以@开头

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

SELECT @priceaverage;

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

    SELECT@pricehigh,@pricelow,@priceaverage;

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

    CREATEPROCEDUREordertotal( INonumberINT, OUTototalDECIMAL(8,2) ) BEGIN SELECTSum(item_price*quantity) FROMorderitems WHEREorder_num=onumberINTOototal; END; CALLordertotal(20005,@total); SELECT@total;

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

    DELIMITER$$ DROPPROCEDUREIFEXISTS`dbcall`.`get_page`$$ CREATEDEFINER=`root`@`localhost`PROCEDURE`get_page`( /**//*Tablename*/ tableNamevarchar(100), /**//*Filedstodisplay*/ fieldsNamesvarchar(100), /**//*Pageindex*/ pageIndexint, /**//*PageSize*/ pageSizeint, /**//*Fieldtosort*/ sortNamevarchar(500), /**//*Condition*/ strWherevarchar(500) ) BEGIN DECLAREfieldlistvarchar(200); iffieldsNames=''||fieldsNames=nullTHEN setfieldlist='*'; else setfieldlist=fieldsNames; endif; ifstrWhere=''||strWhere=nullthen ifsortName=''||sortName=nullthen set@strSQL=concat('SELECT',fieldlist,'FROM',tableName,'LIMIT',(pageIndex-1)*pageSize,',',pageSize); else set@strSQL=concat('SELECT',fieldlist,'FROM',tableName,'ORDERBY',sortName,'LIMIT',(pageIndex-1)*pageSize,',',pageSize); endif; else ifsortName=''||sortName=nullthen set@strSQL=concat('SELECT',fieldlist,'FROM',tableName,'WHERE',strWhere,'LIMIT',(pageIndex-1)*pageSize,',',pageSize); else set@strSQL=concat('SELECT',fieldlist,'FROM',tableName,'WHERE',strWhere,'ORDERBY',sortName,'LIMIT',(pageIndex-1)*pageSize,',',pageSize); endif; endif; PREPAREstmt1FROM@strSQL; EXECUTEstmt1; DEALLOCATEPREPAREstmt1; END$$ DELIMITER;

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

【编辑推荐】

    MySQL查询优化的5个好用方法MySQL修改表字段的实际应用代码演示MySQL数据表中字段的批量修改与复制恢复MySQL数据库root密码2方案MySQL root 密码破解好用方案介绍