MySQLチュートリアル


MySQLでは、テーブル内の操作のために後で使用できるデータベース内で関数を宣言できます.以下の2種類の関数があります.
  • 関数:この関数はある値を返します.
  • ストアドプロシージャ:この関数はvoid関数と同じです.この関数は戻り値を持ちません.
  • The available built-in function in MySQL can be checked here.



    関数を作成する
    MySQLで新しい関数を作成する基本的な構造です.deterministic_optionDETERMINISTICまたはNOT DETERMINISTICで満たされる.DETERMINISTICは、関数が常に同じパラメータ入力に対して同じ値を返すことを意味します.しかしながら、NOT DETERMINISTICは、関数が同じパラメータ入力に異なる値を返すことを意味します.

    NOT DETERMINISTIC is a default deterministic_option in MySQL.


    DELIMITER $$
    CREATE FUNCTION function_name(
        parameter(s)_name data_type
    )
    RETURNS data_type
    
    deterministic_option
    
    BEGIN
        function_body
    END$$
    DELIMITER ;
    
    
    この例では、discountPrice()という関数を入力パラメーターとして、FLOATデータ型を価格として表します.
    DELIMITER $$
    CREATE FUNCTION discountPrice(
        price FLOAT
    )
    RETURNS FLOAT
    DETERMINISTIC
    
    BEGIN
        -- declare a variable called discountedPrice
        DECLARE discountedPrice FLOAT;
        -- give a 10% discount to the price
        SET discountedPrice = price - (price * 0.1);
        -- return the value, in this case the discountedPrice variable
        RETURN discountedPrice;
    END$$
    DELIMITER ;
    
    この関数は、組み込み関数と同じように使用できます.この例ではdiscountPrice()関数を使用します.
    SELECT shop.product_name, shop.price, discountPrice(shop.price) AS discounted_price FROM shop;
    
    これは上記のクエリの出力です.
    +---------------+-------+------------------+
    | product_name  | price | discounted_price |
    +---------------+-------+------------------+
    | Mango         |  12.5 |            11.25 |
    | Low Fat Milk  |   8.8 |             7.92 |
    | Apple         |   7.8 |             7.02 |
    | Fresh Chicken |  10.3 |             9.27 |
    | Corn Flakes   |  2.99 |            2.691 |
    +---------------+-------+------------------+
    

    To see the function status that already created, use SHOW FUNCTION STATUS query.



    ストアドプロシージャの作成
    ストアドプロシージャは、この基本構造を使用して作成できます.
    DELIMITER $$
    
    CREATE PROCEDURE procedure_name(
        IN  param_name data_type,
        OUT procedure_output data_type
    )
    BEGIN
        stored_procedure_body
    END$$
    
    DELIMITER ;
    
    この例では、getPriceWithTax()と呼ばれるストアドプロシージャが作成されます.このストアドプロシージャは、税金を含む製品の価格を計算します.
    -- create a stored procedure
    DELIMITER $$
    CREATE PROCEDURE getPriceWithTax(
        IN productId INT,
        OUT updatedPrice FLOAT
    )
    BEGIN
        -- declare the tax variable with the value = 10
        DECLARE tax FLOAT DEFAULT 10;
        -- declare the price variable to store the price value
        DECLARE originPrice FLOAT DEFAULT 0;
    
        -- get the product's price based on the productId
        SELECT shop.price INTO originPrice FROM shop WHERE shop.id = productId;
        -- set the updatedPrice
        SET updatedPrice = originPrice + tax;
    END$$
    DELIMITER ;
    
    ストアドプロシージャを呼び出すには、CALLクエリを使用します.
    -- call the stored procedure
    -- @updatedPrice is a variable
    CALL getPriceWithTax(1,@updatedPrice);
    
    -- retrieve the value from @updatedPrice variable
    SELECT @updatedPrice;
    
    これは上記のクエリの出力です.
    +---------------+
    | @updatedPrice |
    +---------------+
    |          22.5 |
    +---------------+
    

    ノート
  • は、MySQL hereの機能についてもっと学びます.
  • この記事がSQLの学習に役立つことを願っています.