以下的文章主要介绍的是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 密码破解好用方案介绍