MySQL で関数を作成する
Mehvish Ashiq
2024年2月16日
今日のチュートリアルでは、MySQL で関数を作成する方法について説明します。 最初に構文を説明し、次にサンプル テーブルを使用して関数を作成します。
MySQL で関数を作成する
1つまたは複数のパラメーターを渡して値を取得できるストアド プログラムは、関数と呼ばれます。 いくつかのタスクを実行し、1つの値を出力するための一連の SQL ステートメントがあります。
以下は、MySQL 関数を作成するための構文です。
CREATE FUNCTION functionName(parameter1, parameter2, ..)
RETURN dataType [characteristics]
function_body
ここで、function_body
は、操作またはタスクを完了するための SQL ステートメントで構成されます。 その構造は以下のようになります。
BEGIN
MySQL Statements
RETURN Expression
END
関数を作成する完全な構文は次のとおりです。
DELIMITER ;;
CREATE FUNCTION functionName(parameter1,parameter2,…)
RETURNS datatype
[NOT] DETERMINISTIC
BEGIN
MySQL Statements
RETURN Expression
END ;;
DELIMITER ;
上記の構文では、次のことを行っています。
- デリミタをリセットして、すべてのステートメントを個別に実行できないようにします。
CREATE FUNCTION
キーワードの後に関数の名前を書きます。- 関数名の後の括弧内にすべての パラメーター を記述します。
INOUT
、IN
またはOUT
という名前の修飾子をパラメーターに指定することはできませんが、それら (すべてのパラメーター) はデフォルトでIN
パラメーターです。 - 有効な戻り値 データ型 を書き込みます。
- 関数が
DETERMINISTIC
を使用しているかどうかを指定します。NOT DETERMINISTIC
/DETERMINISTIC
キーワードを記述しない場合、MySQL Server はNOT DETERMINISTIC
を使用します。 BEGIN
ブロックとEND
ブロックの間にメイン コードを記述します。 関数本体には、最低でも 1つのRETURN
ステートメントを記述する必要があります。- 最後に、区切り文字をデフォルト値
;
に変更します。
ID
と CREDIT
の 2つの属性を持つ users
という名前のテーブルを用意してみましょう。ここで、ID
は主キーです。 次のクエリを使用して、users
テーブルを作成および設定できます。
コード例:
# create a table
CREATE TABLE users (
ID INT NOT NULL AUTO_INCREMENT,
CREDIT INT NOT NULL,
PRIMARY KEY (id)
);
# insert data
INSERT INTO users (CREDIT) VALUES (5000);
INSERT INTO users (CREDIT) VALUES (4000);
INSERT INTO users (CREDIT) VALUES (3000);
INSERT INTO users (CREDIT) VALUES(1000);
# display data
SELECT * FROM users;
出力:
+----+--------+
| ID | CREDIT |
+----+--------+
| 1 | 5000 |
| 2 | 4000 |
| 3 | 3000 |
| 4 | 1000 |
+----+--------+
4 rows in set (0.00 sec)
CREDIT
に応じて userLevel
を決定する次の関数を記述します。 以下のコード例を参照してください。
コード例:
DELIMITER ;;
CREATE FUNCTION UserLevels(
credit DECIMAL(10,2)
)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE userLevel VARCHAR(20);
IF credit >= 5000 THEN
SET userLevel = 'PLATINUM';
ELSEIF (credit >= 4000 AND
credit < 5000) THEN
SET userLevel = 'GOLD';
ELSEIF (credit > 1000 AND credit < 4000 ) THEN
SET userLevel = 'SILVER';
ELSE
SET userLevel = 'BASIC';
END IF;
RETURN (userLevel);
END;;
DELIMITER ;
関数が作成されたら、次のクエリを使用して関数を呼び出します。
SELECT ID,CREDIT, UserLevels(CREDIT) AS USER_LEVEL
FROM users;
出力:
+----+--------+------------+
| ID | CREDIT | USER_LEVEL |
+----+--------+------------+
| 1 | 5000 | PLATINUM |
| 2 | 4000 | GOLD |
| 3 | 3000 | SILVER |
| 4 | 1000 | BASIC |
+----+--------+------------+
4 rows in set (0.06 sec)
著者: Mehvish Ashiq