Mysql学習ノート(9):ストレージプロセス

3488 ワード

ストアド・プロシージャと関数:javaのメソッドと同様
メリット:
1、コードの再利用性を高める
2、操作の簡略化
ストアド・プロシージャの意味:事前にコンパイルされたSQL文のセットで、一括処理文を理解します.
1、コードの再利用性の向上2、操作の簡素化3、コンパイル回数の減少、データベースサーバとの接続回数の減少、効率の向上
一、ストレージプロセス文法
1.ストアド・プロシージャの作成
構文:
------>CREATE PROCEDUREストアド・プロシージャ名(パラメータ・リスト)
BEGIN
    ストアド・プロシージャ(正当なSQL文のセット)
END
パラメータリストには、パラメータモードの3つのセクションがあります.  パラメータ名  パラメータタイプ例:in stuname varchar(20)パラメータモード:
  • in:このパラメータは入力として使用することができ、すなわち、このパラメータは呼び出し元の入力値
  • を必要とする.
  • out:このパラメータは出力とすることができ、すなわち、このパラメータは戻り値
  • とすることができる.
  • inout:このパラメータは入力としても出力としてもよい、すなわち、このパラメータは入力値としてもよいし、値
  • を返すこともできる.
    注意:
  • SQLの終了フラグのデフォルトは';',一方、各SQL文は、ストレージ中に最後に終了フラグを使用してSQLの終了を示す必要があります.
  • 終了フラグ';',ストレージ・プロシージャの場合、SQL文が実行された場合、';'に遭遇します.サーバは、現在のストレージ・プロシージャ定義が終了したと判断し、エラーが発生します.
  • DELIMITERキーワードを使用してストレージ・プロシージャの終了フラグを設定し、現在のセグメント区切り記号を「DELIMITER終了フラグ」で宣言し、コンパイラに2つの「終了フラグ」間の内容を通常のSQL文ではなくストレージ・プロシージャのコードとして使用させる.
  • 最後にDELIMITERを実行する必要があります.区切り文字を元に戻します.

  • 構文:delimiter終了タグケース:
    DELIMITER $
    CREATE PROCEDURE student()
    BEGIN
            SELECT * FROM student;
    END $
    DELIMITER ;
    ----------
    2.ストアド・プロシージャのコールCALLストアド・プロシージャ名(実相リスト);
    ==========
    二、ケーススタディ
    1.空の参照リスト
    1.1ストレージ・プロシージャの作成
    DELIMITER $
    CREATE PROCEDURE myp1()
     BEGIN
           INSERT INTO student(NAME,grade) VALUES('  ',50);
     END $
    DELIMITER ;

    1.2呼び出し
    CALL myp1();

    説明:このストレージ・プロシージャを呼び出すたびに、ストレージ内のSQL文が実行されます.つまり、studentテーブルに文が挿入されます.
    -----
    2.inモードパラメータ付きストレージプロセス
    2.1作成
    DELIMITER $
    CREATE PROCEDURE myp2(IN stuName VARCHAR(20))
    BEGIN
           SELECT s.* FROM student s WHERE s.name = stuName; 
    END $
    DELIMITER ;

    2.2呼び出し
    CALL myp2('  ');

    説明:
  • は、呼び出すたびにパラメータに基づいてstudentテーブルをクエリーする入力パラメータ付きストレージ・プロシージャを定義します.

  • 2.3  拡張#ケース:ストレージ・プロシージャのインプリメンテーションを作成し、ユーザーがログインに成功したかどうか
    CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
    BEGIN
        DECLARE result INT DEFAULT 0;#      
        
        SELECT COUNT(*) INTO result#  
        FROM admin
        WHERE admin.username = username
        AND admin.password = PASSWORD;
        
        SELECT IF(result>0,'  ','  ');#  
    END $
    
    #  
    CALL myp3('  ','8888')$

    説明:
  • は、ローカル変数を定義し、adminテーブルをクエリーすることによって値を割り当てるデュアルパラメータのストレージ・プロシージャを定義します.
  • admin値を判断することによりログイン成功/失敗
  • を表示する.
    -
    3.outモードパラメータ付きストレージプロセス
    3.1作成
    DELIMITER $
    CREATE PROCEDURE myp4(IN stuName VARCHAR(20),OUT grade INT)
    BEGIN
           SELECT s.grade INTO grade FROM student s WHERE s.name = stuName; 
    END $
    DELIMITER ;

    ここで定義したOUTパラメータは局所変数として存在する
    3.2呼び出し
    CALL myp4('  ',@grade);

    ユーザー変数gradeを格納中に定義し、データを保存します.
    3.3データの表示
    SELECT @grade;

    -----
    4.inoutモードパラメータ付きストレージプロセス
    ケース:aとbの2つの値が入力され、最終的にはaとbが2倍になり、返されます.
    4.1作成
    DELIMITER $
    CREATE PROCEDURE myp5(INOUT a INT ,INOUT b INT)
    BEGIN
        SET a=a*2;
        SET b=b*2;
    END $
    DELIMITER ;

    4.2呼び出し
    SET @m=10;
    SET @n=20;
    CALL myp8(@m,@n);
    SELECT @m,@n;

    ==========
    三、ストレージプロセスの削除
    構文:drop procedureストレージ・プロシージャ名
    例:
    DROP PROCEDURE p1;
    ==========
    四、ストレージプロセスの情報を表示する
    DESC myp2;
    SHOW CREATE PROCEDURE  myp2;