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 | +--------+
うまくいけば、MySQLのパラメータを使用してストアドプロシージャを簡単に作成できるようになりました。
ボーナスリード:MySQL DROP VIEW
Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。