MySQL預存程序(1) 文法學習

來源:互聯網
上載者:User

標籤:

簡介:一個預存程序包括名字,參數列表,以及可以包括很多SQL語句的SQL語句集。

一個預存程序包括名字,參數列表,以及可以包括很多SQL語句的SQL語句集。

建立預存程序:

 

文法:CREATE PROCEDURE p() BEGIN /*此預存程序的本文*/ ENDCREATE 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))BEGINSELECT 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;

 


另一個帶IN和OUT參數的預存程序:

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) 文法學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.