ホームページ  >  記事  >  データベース  >  mysqlストアドプロシージャの作成

mysqlストアドプロシージャの作成

WBOY
WBOYオリジナル
2023-05-11 22:33:062100ブラウズ

MySQL ストアド プロシージャは、将来の実行のために定義して MySQL データベースに保存できる、プリコンパイルされたコード ブロックです。入力パラメーターを受け入れて結果を返すことができ、ストアド プロシージャを使用して多くの複雑な操作を作成できます。ストアド プロシージャを使用すると、データベースのパフォーマンスが向上し、コードの重複を減らすことができます。

この記事では、ストアド プロシージャの構文、入力パラメータと戻り結果の定義方法、ストアド プロシージャの呼び出し方法など、MySQL を使用してストアド プロシージャを作成する方法を紹介します。開始する前に、MySQL データベースに接続していることを確認してください。

基本的なストアド プロシージャを作成する

MySQL のストアド プロシージャは、デフォルトの区切り文字がストアド プロシージャ ステートメントの終了記号と同じ「;」であるため、DELIMITER を使用してカスタム区切り文字を設定します。次の構文を使用して、基本的なストアド プロシージャを作成できます。

DELIMITER $$
CREATE PROCEDURE procedure_name()
BEGIN
    -- 存储过程代码
END $$
DELIMITER ;

ストアド プロシージャの名前を定義し、BEGIN キーワードと END キーワードを使用してコード ブロックを定義します。新しい MySQL バージョンでは、次に示すように、BEGIN と END 以外の構文を使用してストアド プロシージャを定義することもできます。

CREATE PROCEDURE procedure_name()
    COMMENT '存储过程描述'
    LANGUAGE SQL
    [NOT] DETERMINISTIC
    [CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA]
    SQL SECURITY INVOKER
    COMMENT '存储过程描述'
BEGIN
    -- 存储过程代码
END;

この構文では、オプションで SQL SECURITY などの属性を追加して指定できます。ストアド プロシージャのセキュリティ。

ここで、パラメーターを受け取り、そのパラメーターの 2 乗を返す単純なストアド プロシージャを作成しましょう。それを「正方形」と名付けましょう。

DELIMITER $$
CREATE PROCEDURE square(IN num INT)
BEGIN
    SELECT num * num;
END $$
DELIMITER ;

IN キーワードを使用して入力パラメータを定義します。ストアド プロシージャでは、SELECT ステートメントを使用してそのパラメーターを単純に乗算し、結果を返します。

ストアド プロシージャの呼び出し

ストアド プロシージャを呼び出すには、CALL ステートメントの後にストアド プロシージャの名前とパラメータを指定します。次の構文を使用して、作成したばかりの「square」ストアド プロシージャを呼び出してみましょう。

CALL square(5);

これは 25 を返します。ストアド プロシージャがどのように機能するかをよりよく理解するために、ストアド プロシージャを通常のクエリと比較できます。

SELECT 5 * 5;

これも 25 を返します。ご覧のとおり、ストアド プロシージャと通常のクエリを使用しても同じ結果が得られますが、ストアド プロシージャには、前述したように、高速なクエリや再利用可能なコード ブロックなど、より多くの利点があります。

制御フロー ステートメント

ストアド プロシージャには、IF ステートメント、CASE ステートメント、ループ ステートメントなどのさまざまな制御フロー ステートメントが含まれています。ここではいくつかの例を示します。

IF ステートメント

IF ステートメントは、条件に基づいてコード ブロックをいつ実行するかを決定します。単純な IF ステートメントの例を次に示します。

DELIMITER $$
CREATE PROCEDURE even_or_odd(IN num INT)
BEGIN
    IF num % 2 = 0 THEN
        SELECT 'even';
    ELSE
        SELECT 'odd';
    END IF;
END $$
DELIMITER ;

この例では、数値を受け取り、その数値が偶数か奇数かに基づいて文字列を返すストアド プロシージャを作成しました。数値が 2 で割り切れる場合は「偶数」を返し、それ以外の場合は「奇数」を返します。

CASE ステートメント

CASE ステートメントは IF ステートメントに似ていますが、より多くの条件に基づいてさまざまなコード ブロックを実行できます。簡単な CASE ステートメントの例を次に示します。

DELIMITER $$
CREATE PROCEDURE grade(IN score INT)
BEGIN
    CASE 
        WHEN score >= 90 THEN SELECT 'A';
        WHEN score >= 80 THEN SELECT 'B';
        WHEN score >= 70 THEN SELECT 'C';
        WHEN score >= 60 THEN SELECT 'D';
        ELSE SELECT 'F';
    END CASE;
END $$
DELIMITER ;

この例では、スコアを受け取り、そのスコアに基づいてレター グレードを返すストアド プロシージャを作成します。スコアが90点以上の場合はAグレード、80点と70点の場合はそれぞれBグレードとCグレード、60点以下の場合はDグレード、それ以外の場合はFグレードが割り当てられます。 。

WHILE ループ

WHILE ループは、コードのブロックを繰り返し実行するループの一種です。これは、条件が満たされる限りコードの実行を続ける条件に基づいています。簡単な WHILE ループの例を次に示します。

DELIMITER $$
CREATE PROCEDURE count_down(IN num INT)
BEGIN
    WHILE num > 0 DO
        SELECT num;
        SET num = num - 1;
    END WHILE;
END $$
DELIMITER ;

この例では、数値を受け取り、その数値からカウントダウンして各数値を結果セットに出力するストアド プロシージャを作成しました。カウントダウンするには、WHILE ループを使用し、数値が 0 より大きい限り、それを出力し、num の値をデクリメントします。

結論

MySQL ストアド プロシージャは、データベースのパフォーマンスを大幅に向上させ、コードを簡素化できる強力なツールです。この記事では、MySQL を使用してストアド プロシージャを作成する方法、入力パラメータを定義して結果を返す方法について説明し、さまざまな制御フロー ステートメントの例を示します。ストアド プロシージャは強力ですが、アクセスが適切に制御され、データが保護されるようにセキュリティに注意を払うことが重要です。

以上がmysqlストアドプロシージャの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。