ホームページ  >  記事  >  データベース  >  mysql文字列ストアドプロシージャとは何ですか

mysql文字列ストアドプロシージャとは何ですか

PHPz
PHPz転載
2023-06-01 22:31:29686ブラウズ

1. 文字列ストアド プロシージャの定義

MySQL では、DELIMITER コマンドを使用して「;」とは異なる区切り文字を指定し、ストアド プロシージャ ステートメント内で複数の SQL を使用できます。たとえば、次の例では my_proc という名前のストアド プロシージャが定義されており、区切り文字 "//" が使用されています。

DELIMITER //
CREATE PROCEDURE my_proc()
BEGIN
    -- 定义字符串变量
    DECLARE my_str VARCHAR(50) DEFAULT 'Hello, world!';

    -- 输出字符串变量
    SELECT my_str;

    -- 修改字符串变量的值
    SET my_str = CONCAT(my_str, ' MySQL!');

    -- 再次输出字符串变量
    SELECT my_str;
END //
DELIMITER ;

上の例では、まず DELIMITER コマンドを使用して区切り文字を "/ /" に設定します。次に、my_str という名前の文字列変数を初期値「Hello, world!」で定義します。次にストアドプロシージャにmy_str変数の値を出力し、SETコマンドで値を変更したところ、my_str変数の値が出力されると「Hello,world!」に変わっていることがわかりました。 MySQL!」。

2. 文字列ストアド プロシージャにパラメータを渡す

通常、実際のアプリケーションでは、パラメータに基づいてさまざまな操作を実行するためにストアド プロシージャにパラメータを渡す必要があります。次の例では、my_proc という名前のストアド プロシージャが定義されています。このプロシージャは 2 つのパラメータ (x と y) を受け取り、それらの合計を計算して結果を返します。

DELIMITER //
CREATE PROCEDURE my_proc(IN x INT, IN y INT, OUT result INT)
BEGIN
    SET result = x + y;
END //
DELIMITER ;

上の例では、x は IN キーワードと を使用して定義されています。 y は入力パラメータであり、OUT キーワードを使用して result を出力パラメータとして定義します (つまり、ストアド プロシージャは result の値を返します)。ストアド プロシージャの本体には、x と y の値を加算し、結果を結果変数に格納する計算 SQL ステートメントが含まれているだけです。

次に、CALL コマンドを使用して my_proc ストアド プロシージャを呼び出し、たとえば次の 2 つのパラメータを渡すことができます。

SET @x = 10;
SET @y = 20;
CALL my_proc(@x, @y, @result);
SELECT @result;

上の例では、2 つの変数 @x と @y が最初です。定義し、値を 10 と 20 に割り当てます。次に、CALL コマンドを使用して my_proc ストアド プロシージャを呼び出し、@x と @y を入力パラメータとして渡します。最後に、ストアド プロシージャの出力結果 @result が出力されますコンソールに。

3. IF ステートメントとループ構造を使用する

ストアド プロシージャに IF ステートメントとループ構造を適用すると、より複雑なロジックを実現できます。たとえば、次の例では、パラメーター n を受け取り、フィボナッチ数列の n 番目の数を計算し、結果を返す my_proc という名前のストアド プロシージャを定義します。

DELIMITER //
CREATE PROCEDURE my_proc(IN n INT, OUT result INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE a INT DEFAULT 1;
    DECLARE b INT DEFAULT 1;

    IF n <= 0 THEN
        SET result = 0;
    ELSEIF n = 1 OR n = 2 THEN
        SET result = 1;
    ELSE
        WHILE i < n DO
            SET result = a + b;
            SET a = b;
            SET b = result;
            SET i = i + 1;
        END WHILE;
    END IF;
END //
DELIMITER ;

上記の例では、判定に IF ステートメントを使用します。 n が 0 以下の場合は 0 を直接返し、n が 1 または 2 の場合は 1 を返し、それ以外の場合は WHILE ループを使用してフィボナッチ数列の n 番目の数を計算します。

CALL コマンドを使用して、my_proc ストアド プロシージャを呼び出し、パラメータを渡すことができます。例:

SET @n = 10;
CALL my_proc(@n, @result);
SELECT @result;

上記の例では、パラメータ @n を 10 に割り当て、my_proc ストアド プロシージャを呼び出します。プロシージャと @result の出力がコンソールに出力されます。フィボナッチ数列の 10 番目の数値は 55 であるため、最終出力は 55 になるはずです。

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

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。