개발자 끄적끄적
procedure 본문
<procedure>
- dbms별 유사한 문법 구조를 갖고 있으나 호환되지 않느다
- 컴파일 되어서 해당 dbms내부에 저장된다 따라서 저장형 프로시져라고 불린다
- 반복해서 컴파일 하려면 먼저 기본 procedure를 drop procedure로 삭제해야한다
- procedure은 retrun이 없다 대신, call을 한다
create procedure pro_test1()
begin
declare cnt int default 0;
start_rtn : LOOP
insert into test(s_name) values('HONG');
if(cnt>100) then
leave start_rtn;
end if;
set cnt = cnt + 1;
end loop;
end
<procedure 삭제>
drop procedure[ if exists ] 프로시져명
<parameters>
- mode : in, out, inout
- in : 외부에서 값을 전달 받을 때(in은 생략가능, 안쓰면 기본적으로 in mode)
- out : 프로시져 내부에서 처리된 결과를 프로시져 밖에서 사용하고자 할 때
- inout : in+out 기능을 모두 갖는다
*한 번에 두 번 실행하면 오류가 뜨므로 drop해서 재실행한다
<in - ex>
create procedure in_test(su1 int, su2 int)
begin
select su1+su2;
end;
<out - ex>
create procedure out_test1(out str varchar(50))
begin
set str = 'park';
end;
[console에서 테스트]
call out_test1(@str);
select @str;
- '@'는 str의 값을 전달받는다
<inout - ex>
create procedure inout_test1(inout su int, inout su2 int)
begin
set su = su+100;
set su2 = su2+200;
end;
[console에서 테스트]
set @su = 10;
set @su2 =20;
call inout_test1(@su, @su2);
select @su, @su2;
<if - then>
create procedure if_test1()
begin
declare a int;
declare b int;
set a = 10;
set b = 20;
if(a>b) then
select a;
end if;
if(a<b) then
select b;
end if;
end;
<if-then-else>
create procedure if_test2()
begin
declare a int;
declare b int;
set a=10;
set b=20;
if(a>b) then
select a;
else
select b;
end if;
end;
<if-then-elseif-else>
create procedure if_test3()
begin
declare a int;
declare b int;
declare c int;
set a=10;
set b=20;
set c=30;
if(a>b) then
select a;
elseif a>c then
select b;
else
select c;
end if;
end;