SQLServer
・定義
create procedure ストアドプロシージャ名
@パラメータ名 型
as
begin
処理
end
・変数
宣言
declare @変数名 型
データ型
varchar:文字列
int:数値
decimal:小数
date:日付
代入
set 変数 = 値
・カーソル
1行ずつループして処理する方法。
カーソルの宣言
declare カーソル名 cursor for (select 文)
カーソルを開く
open カーソル名
データの取得
fetch next from カーソル名 into 変数リスト
ループ処理の実行
while 条件式
begin
処理内容 where current of カーソル名
end
※ループの定番
while @@fetch_status = 0
カーソルを閉じる
close カーソル名
カーソルの開放
deallocate カーソル名
MySQL
CREATE ROUTINEの権限が必要。
・基本
create procedure sample01()
select now();
mysql>call sample01;
・削除
mysql>drop procedure sample01;
・一覧
show procedure status;
・中身
show create procedure sample01;
・引数をとる
create procedure sample01(in a int, in b int)
select a + b;
mysql>call sample01(10,5);
・返り値
create procedure sample01(out x int)
set x = 3;
mysql> call sample01(@var);
mysql> select @var;
・複数のクエリを発行
delimiter //
create procedure sample01()
begin
select 1;
select 2;
end//
delimiter ;
mysql> call sample01;
・IF文
delimiter //
create procedure sample02(in x int)
begin
if x = 1 then
select “inp 1”;
elseif x = 2 then
select “int 2”;
else
select “inp else”;
end if
end //
delimiter ;
call sample02(1);
・select~into文で変数へ
delimiter //
create procedure p(in a int, out sum int)
begin
select a * 2 into @tmp;
set sum = @tmp;
end //
delimiter ;
call p (4,@sum);
select @sum;
・カーソル単位で処理する
declare xxx cursorという形で宣言する。
for select でselectの結果を定義する。
fetch cursor for カラムで代入。
処理前にopenして最後にcloseする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
delimiter // create procedure p(in i_id int, in i_str varchar(10), out o_id int, out o_str varchar(10)) begin declare myid int; declare mystr varchar(10); declare mycur cursor for select id,str from test_tbl; set @pos = 0; select count(*) into @total from test_tbl; set o_id = 0; set o_str = ''; open mycur; while @total > @pos do fetch mycur into myid,mystr; if myid = i_id or mystr = i_str then set o_id = myid; set o_str = mystr; set @pos = @total; end if; set @pos = @pos + 1; end while; close mycur; end // delimiter ; mysql> CALL p( 4, 'cc', @id, @str ); mysql> SELECT @id; |