MySQL で関数を作成する

Mehvish Ashiq 2024年2月16日
MySQL で関数を作成する

今日のチュートリアルでは、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 ;

上記の構文では、次のことを行っています。

  1. デリミタをリセットして、すべてのステートメントを個別に実行できないようにします。
  2. CREATE FUNCTION キーワードの後に関数の名前を書きます。
  3. 関数名の後の括弧内にすべての パラメーター を記述します。 INOUTIN または OUT という名前の修飾子をパラメーターに指定することはできませんが、それら (すべてのパラメーター) はデフォルトで IN パラメーターです。
  4. 有効な戻り値 データ型 を書き込みます。
  5. 関数が DETERMINISTIC を使用しているかどうかを指定します。 NOT DETERMINISTIC/DETERMINISTIC キーワードを記述しない場合、MySQL Server は NOT DETERMINISTIC を使用します。
  6. BEGIN ブロックと END ブロックの間にメイン コードを記述します。 関数本体には、最低でも 1つの RETURN ステートメントを記述する必要があります。
  7. 最後に、区切り文字をデフォルト値 ; に変更します。

IDCREDIT の 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
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MySQL Function