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