マルチメーター_MySQLストアド・プロシージャ
4236 ワード
1、ストレージプロセスストレージ・プロシージャとは ストレージ・プロシージャは、特定の機能を完了するsql文のセットです.コンパイルによってデータベースに格納され、指定されたストレージ・プロシージャ名呼び出しによって実行される .ストアド・プロシージャ=sql文セット+制御文 ストレージ・プロシージャの使用の利点 ストアド・プロシージャ作成は、ストアド・プロシージャ文 を再記述することなく複数回呼び出すことができる.記憶プロセスは受信パラメータをサポートし、出力値 を返す.ストレージプロセスプログラムの実行速度を速める ストレージ・プロシージャは、sql文の機能と柔軟性を向上させる ストレージ・プロシージャの作成 フォーマットは、以下の である.
delimiter:区切り記号、境界記号、ここで指定した区切り記号は//で、 をカスタマイズできます.ストレージ・プロシージャの作成 create procedureストアド・プロシージャ名() begin...endは、ストレージ・プロシージャの開始および終了 を表す.ストレージ・プロシージャの削除 drop procedureストアド・プロシージャ名 drop procedure if existsストレージ・プロシージャ名#強化コードの堅牢性 ストレージ・プロシージャを呼び出す callストアド・プロシージャ名() inパラメータ値呼び出し時に を指定する必要があります. outパラメータは、呼び出し後に に戻ることができる. inoutパラメータ呼び出し時に指定され、 に戻ることができる.
2、実例ストレージプロセスによりデータ作成 を実現する.ストレージプロセスにより一括削除データ を実現する.は、記憶処理によりクエリーデータ を実現する.
#
delimiter //
create procedure ([in|out|inout] , )
begin
end
//
delimiter ;
call ( ) #
# in ,b
delimiter //
drop procedure if exists b;
create procedure b(in n int)
begin
select n;
set n = 2;
select n;
end
//
delimiter ;
set @n = 1;
call b(@n); # b
+------+
| n |
+------+
| 1 |
+------+
+------+
| n |
+------+
| 2 |
+------+
# out
# out ,
delimiter //
drop procedure if exists b;
create procedure b(out n int)
begin
select n;
set n = 2;
select n;
end
//
delimiter ;
set @n = 1;
call b(@n); # b
+-------+
| n |
+-------+
| NULL | # out , , n null
+-------+
+-------+
| n |
+-------+
| 2 |
+-------+
# inout
delimiter //
drop procedure if exists b;
create procedure b(inout n int)
begin
select n;
set n = 2;
select n;
end
//
delimiter ;
set @n = 1;
call b(@n); # b
+---------+
| n |
+---------+
| 1 |
+---------+
+---------+
| n |
+---------+
| 2 |
+---------+
2、実例
# t t
delimiter //
drop procedure if exists a;
create procedure a(in n int)
begin
declare x int default 1;
declare y int default 10;
drop table if exists t;
create table t(id int(3),age int(3));
while n < 20 do
insert into t values(x,y);
set x = x + 1;
set y = y + 10;
set n = n + 1;
end while;
select * from t;
end
//
delimiter ;
call a(5) #
delimiter //
drop PROCEDURE if EXISTS i;
CREATE PROCEDURE i(n int)
BEGIN
DECLARE x int DEFAULT 1;
DECLARE y varchar(20) DEFAULT "";
DECLARE z int DEFAULT 22;
while n <=100 DO
set y = CONCAT("zhangsan",x);
INSERT into t VALUES(x,y,z);
set x = x + 1;
set n = n + 1;
end WHILE;
SELECT COUNT(*) from t;
end
//
delimiter ;
call i(1);
delimiter //
drop procedure if exists b;
create procedure b(in n int)
begin
declare x int default 1;
while n < 10 do
delete from t where id = x;
set n = n + 1;
set x = x + 1;
end while;
select * from t;
end
//
delimiter ;
call b(0) #
delimiter //
drop procedure if exists c;
create procedure c(n int)
BEGIN
drop table if exists dcs;
create table dcs(id int(1),name varchar(10),sex char(2));
alter table dcs change id id int(1) primary key auto_increment;
insert into dcs(name,sex)values('zhangsan1','m'),('lisi1','m');
insert into dcs(name,sex)values('zhangsan2','m'),('lisi2','m');
insert into dcs(name,sex)values('zhangsan3','m'),('lisi3','m');
insert into dcs(name,sex)values('zhangsan4','m'),('lisi4','m');
insert into dcs(name,sex)values('zhangsan5','m'),('lisi5','m');
if (n<>0) then
select * from dcs where id < n;
else
select * from dcs;
end if;
end
//
delimiter ;
call c(6) #