MySQL 存儲(chǔ)過(guò)程的創(chuàng)建方案
以下的文章主要介紹的是MySQL 存儲(chǔ)過(guò)程的實(shí)際操作解析,我們大家都知道一個(gè)MySQL 存儲(chǔ)過(guò)程主要包括名字,參數(shù)列表,還有包括很多的SQL語(yǔ)句與SQL語(yǔ)句集。以下就是具體內(nèi)容的描述,
創(chuàng)建MySQL 存儲(chǔ)過(guò)程:
語(yǔ)法:
- CREATE PROCEDURE p()
- BEGIN
/*此存儲(chǔ)過(guò)程的正文*/
- END
- CREATE PROCEDURE productpricing()
- BEGIN
- SELECT Avg(pro_price) AS priceaverage
- FROM products;
- END;
begin…end之間是存儲(chǔ)過(guò)程的主體定義
MySQL的分界符是分號(hào)(;)
調(diào)用存儲(chǔ)過(guò)程的方法是:
CALL加上過(guò)程名以及一個(gè)括號(hào)
例如調(diào)用上面定義的MySQL 存儲(chǔ)過(guò)程
- CALL productpricing();
哪怕是不用傳遞參數(shù),存儲(chǔ)過(guò)程名字后面的括號(hào)“()”也是必須的
刪除存儲(chǔ)過(guò)程的方法是:
- DROP PROCUDURE productpricing;
創(chuàng)建帶參數(shù)的存儲(chǔ)過(guò)程:
- 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用于指定參數(shù)的數(shù)據(jù)類型
OUT用于表明此值是用于從存儲(chǔ)過(guò)程里輸出的
MySQL支持 OUT, IN, INOUT
調(diào)用帶參數(shù)的MySQL 存儲(chǔ)過(guò)程:
- CALL productpricing(@pricelow,
- @pricehigh,
- @priceaverage);
所有的參數(shù)必須以@開(kāi)頭
要想獲取@priceaverage的值,用以下語(yǔ)句
SELECT @priceaverage;
獲取三個(gè)的值,用以下語(yǔ)句
- SELECT @pricehigh, @pricelow, @priceaverage;
另一個(gè)帶IN和OUT參數(shù)的存儲(chǔ)過(guò)程:
- 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;
添加一個(gè)完整的例子:(這是一個(gè)自定義分頁(yè)的MySQL 存儲(chǔ)過(guò)程)
- 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 ;
以上的相關(guān)內(nèi)容就是對(duì)MySQL 存儲(chǔ)過(guò)程的介紹,望你能有所收獲。
【編輯推薦】