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終了タグケース:
2.ストアド・プロシージャのコールCALLストアド・プロシージャ名(実相リスト);
==========
二、ケーススタディ
1.空の参照リスト
1.1ストレージ・プロシージャの作成
1.2呼び出し
説明:このストレージ・プロシージャを呼び出すたびに、ストレージ内のSQL文が実行されます.つまり、studentテーブルに文が挿入されます.
-----
2.inモードパラメータ付きストレージプロセス
2.1作成
2.2呼び出し
説明:は、呼び出すたびにパラメータに基づいてstudentテーブルをクエリーする入力パラメータ付きストレージ・プロシージャを定義します.
2.3 拡張#ケース:ストレージ・プロシージャのインプリメンテーションを作成し、ユーザーがログインに成功したかどうか
説明:は、ローカル変数を定義し、adminテーブルをクエリーすることによって値を割り当てるデュアルパラメータのストレージ・プロシージャを定義します. admin値を判断することによりログイン成功/失敗 を表示する.
-
3.outモードパラメータ付きストレージプロセス
3.1作成
ここで定義したOUTパラメータは局所変数として存在する
3.2呼び出し
ユーザー変数gradeを格納中に定義し、データを保存します.
3.3データの表示
-----
4.inoutモードパラメータ付きストレージプロセス
ケース:aとbの2つの値が入力され、最終的にはaとbが2倍になり、返されます.
4.1作成
4.2呼び出し
==========
三、ストレージプロセスの削除
構文:drop procedureストレージ・プロシージャ名
例:
四、ストレージプロセスの情報を表示する
メリット:
1、コードの再利用性を高める
2、操作の簡略化
ストアド・プロシージャの意味:事前にコンパイルされたSQL文のセットで、一括処理文を理解します.
1、コードの再利用性の向上2、操作の簡素化3、コンパイル回数の減少、データベースサーバとの接続回数の減少、効率の向上
一、ストレージプロセス文法
1.ストアド・プロシージャの作成
構文:
------>CREATE PROCEDUREストアド・プロシージャ名(パラメータ・リスト)
BEGIN
ストアド・プロシージャ(正当なSQL文のセット)
END
パラメータリストには、パラメータモードの3つのセクションがあります. パラメータ名 パラメータタイプ例:in stuname varchar(20)パラメータモード:
注意:
構文: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(' ');
説明:
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')$
説明:
-
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;