mysql------ストレージプロセス
データベース内のストアド・プロシージャ
一、ストレージプロセス
1、概念
1)データベースに名前で格納された、事前にコンパイルされた、特定の機能を完了するためのsql文のセット
2)独立して実行したり、アプリケーションから呼び出したりすることができ、ユーザーが変数を宣言できるようにする
3)一旦作成すると、サーバーがコンパイルされ、必要に応じて複数回使用できる
4)プロセスネストをサポートし、パラメータを受け入れて出力し、ストレージプロセスを実行する状態値を返すことができる
5)は,制御フローとsql文によって書かれるプロセスである.
2、メリット
1)ストアド・プロシージャは作成時にのみコンパイルされ、以降はストアド・プロシージャを実行するたびに再コンパイルする必要はありませんが、一般的なsql文はこのように一度にコンパイルすることはできませんので、データベースの実行速度を向上させることができます.
2)重複使用により、データベース開発者の作業量を削減
3)特定のストレージ・プロシージャに対する使用権を持つユーザのみを設定し、セキュリティを向上させる
二、ストアド・プロシージャp 1//「DELIMITER$$」を定義するのは、解析器に「$$」を終了フラグとするためである(そうでなければデフォルトでは「;「番号を終了フラグとする」;「番号を終了フラグとする」;「できない
プロセスの終了フラグとして使用します.
JAvaでの実装コード
三、パラメータ付きストレージプロセス
JAvaでの実装コード
四、戻り値のあるストレージプロセス――パラメータと変数の問題(@変数名、一つの@はユーザー変数、二つの@即ち@@はグローバルなシステム変数)
JAvaでの実装コード
一、ストレージプロセス
1、概念
1)データベースに名前で格納された、事前にコンパイルされた、特定の機能を完了するためのsql文のセット
2)独立して実行したり、アプリケーションから呼び出したりすることができ、ユーザーが変数を宣言できるようにする
3)一旦作成すると、サーバーがコンパイルされ、必要に応じて複数回使用できる
4)プロセスネストをサポートし、パラメータを受け入れて出力し、ストレージプロセスを実行する状態値を返すことができる
5)は,制御フローとsql文によって書かれるプロセスである.
2、メリット
1)ストアド・プロシージャは作成時にのみコンパイルされ、以降はストアド・プロシージャを実行するたびに再コンパイルする必要はありませんが、一般的なsql文はこのように一度にコンパイルすることはできませんので、データベースの実行速度を向上させることができます.
2)重複使用により、データベース開発者の作業量を削減
3)特定のストレージ・プロシージャに対する使用権を持つユーザのみを設定し、セキュリティを向上させる
二、ストアド・プロシージャp 1//「DELIMITER$$」を定義するのは、解析器に「$$」を終了フラグとするためである(そうでなければデフォルトでは「;「番号を終了フラグとする」;「番号を終了フラグとする」;「できない
プロセスの終了フラグとして使用します.
<span style="font-size:18px;">DELIMITER$$
CREATE PROCEDURE p1()
BEGIN
SELECT * FROM stud;
INSERT INTO stud(id,sname,age,score,dept) VALUES(1014,' ',33,55,' ');
END$$
DELIMITER; //
CALL p1(); // p1</span>
JAvaでの実装コード
<span style="font-size:18px;">@Test
public void testCall() throws Exception{
Connection con = ConnFactory.getConn();
CallableStatement cs =con.prepareCall("call pp1()");//
ResultSet rs = cs.executeQuery();//
while(rs.next()){
System.out.println(rs.getString("sname"));
}
con.close();
}</span>
三、パラメータ付きストレージプロセス
<span style="font-size:18px;">DELIMITER$$
CREATE PROCEDURE p2(IN id INT, IN nm VARCHAR(30) )
BEGIN
INSERT INTO stud(id,sname) VALUES(id,nm);
END$$
DELIMITER ;
DROP PROCEDURE p2;
CALL p2(1015,' ');</span>
JAvaでの実装コード
<span style="font-size:18px;">@Test //
public void testCall2() throws Exception{
Connection con = ConnFactory.getConn();
//CallableStatement cs =con.prepareCall("call p2(1017,'lusy')");//
CallableStatement cs =con.prepareCall("call p2(?,?)");//
cs.setInt(1, 1018);
cs.setString(2, " ");
cs.executeUpdate();
con.close();
}</span>
四、戻り値のあるストレージプロセス――パラメータと変数の問題(@変数名、一つの@はユーザー変数、二つの@即ち@@はグローバルなシステム変数)
<span style="font-size:18px;">DELIMITER$$
CREATE PROCEDURE p3(IN id INT, IN nm VARCHAR(30), OUT num INT )
BEGIN
INSERT INTO stud(id,sname) VALUES(id,nm);
SELECT COUNT(*) INTO num FROM stud;
END$$
DELIMITER ;
CALL p3(1016,' ',@aa);
SELECT @aa; // aa </span>
JAvaでの実装コード
<span style="font-size:18px;">@Test // ,
public void testCall3() throws Exception{
Connection con = ConnFactory.getConn();
CallableStatement cs =con.prepareCall("call p3(?,?,?)");//
cs.setInt(1, 1020);
cs.setString(2, " 3");
cs.registerOutParameter(3, Types.INTEGER);
//cs.executeUpdate();
cs.execute();// sql
int num = cs.getInt(3);
System.out.println(" :"+num);
con.close();
}</span>