mysql預存程序文法學習

來源:互聯網
上載者:User
簡介:一個預存程序包括名字,參數列表,以及可以包括很多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;

另一個帶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 ;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.