sql >> データベース >  >> RDS >> Mysql

パラメータ付きのMySQLストアドプロシージャ

    MySQLのストアドプロシージャに入力を渡す必要がある場合があります。この記事では、パラメータを使用してMySQLストアドプロシージャを作成する方法と、ストアドプロシージャでサポートされているさまざまなタイプのパラメータについて説明します。

    パラメータを使用したMySQLストアドプロシージャ

    パラメータを使用してストアドプロシージャを作成する手順は次のとおりです。 MySQLは、IN、OUT、およびINOUTの3種類のストアドプロシージャパラメータをサポートしています。それぞれを詳しく見ていきましょう

    IN –これはデフォルトのモードです。このモードでは、callステートメントは引数をストアドプロシージャに渡す必要があります。また、INタイプのパラメータの値は保護されています。つまり、ストアドプロシージャ内で値を変更しても、その値は変更されません。

    OUT – OUTパラメータの値はストアドプロシージャ内で変更でき、その新しい値はcallステートメントに返されます。

    INOUT –この場合、callステートメントは引数を渡すことができ、ストアドプロシージャはこの値を変更して、callステートメントに戻すことができます。

    MySQLのパラメータを使用したスト​​アドプロシージャの構文は次のとおりです。

    [IN | OUT | INOUT] parameter_name datatype[(length)]

    上記のステートメントでは、最初にパラメーターのタイプを指定し、次にパラメーター名と列のタイプを指定します。

    パラメータ例を使用したMySQLストアドプロシージャ

    パラメータを使用したスト​​アドプロシージャの例をいくつか見てみましょう。

    INパラメータ

    INパラメータを使用してストアドプロシージャを作成するためのSQLクエリは次のとおりです。

    mysql> DELIMITER //
    
    mysql> CREATE PROCEDURE get_product(
           IN prod_id int
           )
           BEGIN
           SELECT *
            FROM products
           WHERE product_id = prod_id;
           END //
    
    mysql> DELIMITER ;
    mysql> call get_product(1);
    +------------+--------------+-------+
    | product_id | product_name | price |
    +------------+--------------+-------+
    |          1 | iPhone 11    |   400 |
    +------------+--------------+-------+
    
    mysql> call get_product();
    ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE sample.get_product; expected 1, got 0
    

    上記では、INストアドプロシージャパラメータ prod_idを定義しました。 。 callステートメントで引数を渡すと、ストアドプロシージャは期待される結果を返します。ただし、引数を渡さないと、エラーが発生します。

    ボーナスリード:MySQLで複合主キーを作成する方法

    OUTパラメータ

    これは、OUTパラメータを使用して作成されたストアドプロシージャです。

    mysql> DELIMITER $$
    
    mysql> CREATE PROCEDURE get_count(
           IN prod_id int,
           OUT total INT
           )
           BEGIN
           SELECT COUNT(*)
           INTO total
           FROM products
           WHERE product_id = prod_id;
           END$$
    
    mysql> DELIMITER ;
    
    mysql> call get_count(1,@total);
    
    mysql> select @total;
    +--------+
    | @total |
    +--------+
    |      1 |
    +--------+
    

    上記のストアドプロシージャでは、prod_idのINパラメータとプロシージャの結果を格納するOUTパラメータの2つのパラメータを定義しています。

    callステートメントで製品IDを渡すと、ストアドプロシージャは、この製品IDに一致する行数を計算し、その結果をOUTパラメータ totalに格納します。

    ボーナスリード:MySQLでテーブルを切り捨てる方法

    INOUTパラメータ

    INOUTパラメータを使用して作成されたストアドプロシージャは次のとおりです。

    DELIMITER $$
    
    CREATE PROCEDURE counter(
    	INOUT count INT,
        IN increment INT
    )
    BEGIN
    	SET count = count + increment;
    END$$
    
    DELIMITER ;
    

    上記のストアドプロシージャでは、INパラメータを増分定義しました。 およびINOUTパラメータcount ストアドプロシージャの結果を格納します。ストアドプロシージャは基本的に増分を追加します カウント パラメータを設定し、結果を countに保存します パラメータ。

    mysql> SET @count = 10;
    
    mysql> CALL counter(@count,1);
    
    mysql> SELECT @count;
    +--------+
    | @count |
    +--------+
    |     11 |
    +--------+
    

    うまくいけば、My​​SQLのパラメータを使用してストアドプロシージャを簡単に作成できるようになりました。

    ボーナスリード:MySQL DROP VIEW

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. Oracle SQL Developer:REFCURSORの結果をグリッドに表示しますか?

    2. 32ビットアプリケーションをjBASEに接続する

    3. MySQLエラーを取り除く方法「プリペアドステートメントは再準備する必要があります」

    4. C#の単一のOracleコマンドで複数のクエリを実行する